Try to package traefik
This commit is contained in:
parent
1ea9007626
commit
717711ae5d
2
traefik/base/charts/traefik/.helmignore
Normal file
2
traefik/base/charts/traefik/.helmignore
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
tests/
|
||||||
|
crds/kustomization.yaml
|
7647
traefik/base/charts/traefik/Changelog.md
Normal file
7647
traefik/base/charts/traefik/Changelog.md
Normal file
File diff suppressed because it is too large
Load diff
34
traefik/base/charts/traefik/Chart.yaml
Normal file
34
traefik/base/charts/traefik/Chart.yaml
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
annotations:
|
||||||
|
artifacthub.io/changes: "- \"fix: \U0001F41B missing quote on experimental plugin
|
||||||
|
args\"\n- \"fix: update traefik v3 serverstransporttcps CRD\"\n- \"feat: set runtimeClassName
|
||||||
|
on pod spec\"\n- \"feat: create v1 Gateway and GatewayClass Version for Traefik
|
||||||
|
v3\"\n- \"feat: allow exposure of ports on internal service only\"\n- \"doc: fix
|
||||||
|
invalid suggestion on TLSOption (#996)\"\n- \"chore: \U0001F527 update maintainers\"\n-
|
||||||
|
\"chore: \U0001F527 promote jnoordsij to Traefik Helm Chart maintainer\"\n- \"chore(release):
|
||||||
|
publish v26.1.0\"\n- \"chore(deps): update traefik docker tag to v2.11.0\"\n-
|
||||||
|
\"chore(deps): update traefik docker tag to v2.10.7\"\n- \"chore(crds): update
|
||||||
|
definitions for traefik v2.11\"\n"
|
||||||
|
apiVersion: v2
|
||||||
|
appVersion: v2.11.0
|
||||||
|
description: A Traefik based Kubernetes ingress controller
|
||||||
|
home: https://traefik.io/
|
||||||
|
icon: https://raw.githubusercontent.com/traefik/traefik/v2.3/docs/content/assets/img/traefik.logo.png
|
||||||
|
keywords:
|
||||||
|
- traefik
|
||||||
|
- ingress
|
||||||
|
- networking
|
||||||
|
kubeVersion: '>=1.16.0-0'
|
||||||
|
maintainers:
|
||||||
|
- email: michel.loiseleur@traefik.io
|
||||||
|
name: mloiseleur
|
||||||
|
- email: charlie.haley@traefik.io
|
||||||
|
name: charlie-haley
|
||||||
|
- email: remi.buisson@traefik.io
|
||||||
|
name: darkweaver87
|
||||||
|
- name: jnoordsij
|
||||||
|
name: traefik
|
||||||
|
sources:
|
||||||
|
- https://github.com/traefik/traefik
|
||||||
|
- https://github.com/traefik/traefik-helm-chart
|
||||||
|
type: application
|
||||||
|
version: 26.1.0
|
530
traefik/base/charts/traefik/EXAMPLES.md
Normal file
530
traefik/base/charts/traefik/EXAMPLES.md
Normal file
|
@ -0,0 +1,530 @@
|
||||||
|
# Install as a DaemonSet
|
||||||
|
|
||||||
|
Default install is using a `Deployment` but it's possible to use `DaemonSet`
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
deployment:
|
||||||
|
kind: DaemonSet
|
||||||
|
```
|
||||||
|
|
||||||
|
# Install in a dedicated namespace, with limited RBAC
|
||||||
|
|
||||||
|
Default install is using Cluster-wide RBAC but it can be restricted to target namespace.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
rbac:
|
||||||
|
namespaced: true
|
||||||
|
```
|
||||||
|
|
||||||
|
# Install with auto-scaling
|
||||||
|
|
||||||
|
When enabling [HPA](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/)
|
||||||
|
to adjust replicas count according to CPU Usage, you'll need to set resources and nullify replicas.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
deployment:
|
||||||
|
replicas: null
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: "100m"
|
||||||
|
memory: "50Mi"
|
||||||
|
limits:
|
||||||
|
cpu: "300m"
|
||||||
|
memory: "150Mi"
|
||||||
|
autoscaling:
|
||||||
|
enabled: true
|
||||||
|
maxReplicas: 2
|
||||||
|
metrics:
|
||||||
|
- type: Resource
|
||||||
|
resource:
|
||||||
|
name: cpu
|
||||||
|
target:
|
||||||
|
type: Utilization
|
||||||
|
averageUtilization: 80
|
||||||
|
```
|
||||||
|
|
||||||
|
# Access Traefik dashboard without exposing it
|
||||||
|
|
||||||
|
This HelmChart does not expose the Traefik dashboard by default, for security concerns.
|
||||||
|
Thus, there are multiple ways to expose the dashboard.
|
||||||
|
For instance, the dashboard access could be achieved through a port-forward :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
kubectl port-forward $(kubectl get pods --selector "app.kubernetes.io/name=traefik" --output=name) 9000:9000
|
||||||
|
```
|
||||||
|
|
||||||
|
Accessible with the url: http://127.0.0.1:9000/dashboard/
|
||||||
|
|
||||||
|
# Publish and protect Traefik Dashboard with basic Auth
|
||||||
|
|
||||||
|
To expose the dashboard in a secure way as [recommended](https://doc.traefik.io/traefik/operations/dashboard/#dashboard-router-rule)
|
||||||
|
in the documentation, it may be useful to override the router rule to specify
|
||||||
|
a domain to match, or accept requests on the root path (/) in order to redirect
|
||||||
|
them to /dashboard/.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# Create an IngressRoute for the dashboard
|
||||||
|
ingressRoute:
|
||||||
|
dashboard:
|
||||||
|
enabled: true
|
||||||
|
# Custom match rule with host domain
|
||||||
|
matchRule: Host(`traefik-dashboard.example.com`)
|
||||||
|
entryPoints: ["websecure"]
|
||||||
|
# Add custom middlewares : authentication and redirection
|
||||||
|
middlewares:
|
||||||
|
- name: traefik-dashboard-auth
|
||||||
|
|
||||||
|
# Create the custom middlewares used by the IngressRoute dashboard (can also be created in another way).
|
||||||
|
# /!\ Yes, you need to replace "changeme" password with a better one. /!\
|
||||||
|
extraObjects:
|
||||||
|
- apiVersion: v1
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
name: traefik-dashboard-auth-secret
|
||||||
|
type: kubernetes.io/basic-auth
|
||||||
|
stringData:
|
||||||
|
username: admin
|
||||||
|
password: changeme
|
||||||
|
|
||||||
|
- apiVersion: traefik.io/v1alpha1
|
||||||
|
kind: Middleware
|
||||||
|
metadata:
|
||||||
|
name: traefik-dashboard-auth
|
||||||
|
spec:
|
||||||
|
basicAuth:
|
||||||
|
secret: traefik-dashboard-auth-secret
|
||||||
|
```
|
||||||
|
|
||||||
|
# Publish and protect Traefik Dashboard with an Ingress
|
||||||
|
|
||||||
|
To expose the dashboard without IngressRoute, it's more complicated and less
|
||||||
|
secure. You'll need to create an internal Service exposing Traefik API with
|
||||||
|
special _traefik_ entrypoint.
|
||||||
|
|
||||||
|
You'll need to double check:
|
||||||
|
1. Service selector with your setup.
|
||||||
|
2. Middleware annotation on the ingress, _default_ should be replaced with traefik's namespace
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
ingressRoute:
|
||||||
|
dashboard:
|
||||||
|
enabled: false
|
||||||
|
additionalArguments:
|
||||||
|
- "--api.insecure=true"
|
||||||
|
# Create the service, middleware and Ingress used to expose the dashboard (can also be created in another way).
|
||||||
|
# /!\ Yes, you need to replace "changeme" password with a better one. /!\
|
||||||
|
extraObjects:
|
||||||
|
- apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: traefik-api
|
||||||
|
spec:
|
||||||
|
type: ClusterIP
|
||||||
|
selector:
|
||||||
|
app.kubernetes.io/name: traefik
|
||||||
|
app.kubernetes.io/instance: traefik-default
|
||||||
|
ports:
|
||||||
|
- port: 8080
|
||||||
|
name: traefik
|
||||||
|
targetPort: 9000
|
||||||
|
protocol: TCP
|
||||||
|
|
||||||
|
- apiVersion: v1
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
name: traefik-dashboard-auth-secret
|
||||||
|
type: kubernetes.io/basic-auth
|
||||||
|
stringData:
|
||||||
|
username: admin
|
||||||
|
password: changeme
|
||||||
|
|
||||||
|
- apiVersion: traefik.io/v1alpha1
|
||||||
|
kind: Middleware
|
||||||
|
metadata:
|
||||||
|
name: traefik-dashboard-auth
|
||||||
|
spec:
|
||||||
|
basicAuth:
|
||||||
|
secret: traefik-dashboard-auth-secret
|
||||||
|
|
||||||
|
- apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: traefik-dashboard
|
||||||
|
annotations:
|
||||||
|
traefik.ingress.kubernetes.io/router.entrypoints: websecure
|
||||||
|
traefik.ingress.kubernetes.io/router.middlewares: default-traefik-dashboard-auth@kubernetescrd
|
||||||
|
spec:
|
||||||
|
rules:
|
||||||
|
- host: traefik-dashboard.example.com
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: traefik-api
|
||||||
|
port:
|
||||||
|
name: traefik
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
# Install on AWS
|
||||||
|
|
||||||
|
It can use [native AWS support](https://kubernetes.io/docs/concepts/services-networking/service/#aws-nlb-support) on Kubernetes
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
service:
|
||||||
|
annotations:
|
||||||
|
service.beta.kubernetes.io/aws-load-balancer-type: nlb
|
||||||
|
```
|
||||||
|
|
||||||
|
Or if [AWS LB controller](https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.2/guide/service/annotations/#legacy-cloud-provider) is installed :
|
||||||
|
```yaml
|
||||||
|
service:
|
||||||
|
annotations:
|
||||||
|
service.beta.kubernetes.io/aws-load-balancer-type: nlb-ip
|
||||||
|
```
|
||||||
|
|
||||||
|
# Install on GCP
|
||||||
|
|
||||||
|
A [regional IP with a Service](https://cloud.google.com/kubernetes-engine/docs/tutorials/configuring-domain-name-static-ip#use_a_service) can be used
|
||||||
|
```yaml
|
||||||
|
service:
|
||||||
|
spec:
|
||||||
|
loadBalancerIP: "1.2.3.4"
|
||||||
|
```
|
||||||
|
|
||||||
|
Or a [global IP on Ingress](https://cloud.google.com/kubernetes-engine/docs/tutorials/configuring-domain-name-static-ip#use_an_ingress)
|
||||||
|
```yaml
|
||||||
|
service:
|
||||||
|
type: NodePort
|
||||||
|
extraObjects:
|
||||||
|
- apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: traefik
|
||||||
|
annotations:
|
||||||
|
kubernetes.io/ingress.global-static-ip-name: "myGlobalIpName"
|
||||||
|
spec:
|
||||||
|
defaultBackend:
|
||||||
|
service:
|
||||||
|
name: traefik
|
||||||
|
port:
|
||||||
|
number: 80
|
||||||
|
```
|
||||||
|
|
||||||
|
Or a [global IP on a Gateway](https://cloud.google.com/kubernetes-engine/docs/how-to/deploying-gateways) with continuous HTTPS encryption.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
ports:
|
||||||
|
websecure:
|
||||||
|
appProtocol: HTTPS # Hint for Google L7 load balancer
|
||||||
|
service:
|
||||||
|
type: ClusterIP
|
||||||
|
extraObjects:
|
||||||
|
- apiVersion: gateway.networking.k8s.io/v1beta1
|
||||||
|
kind: Gateway
|
||||||
|
metadata:
|
||||||
|
name: traefik
|
||||||
|
annotations:
|
||||||
|
networking.gke.io/certmap: "myCertificateMap"
|
||||||
|
spec:
|
||||||
|
gatewayClassName: gke-l7-global-external-managed
|
||||||
|
addresses:
|
||||||
|
- type: NamedAddress
|
||||||
|
value: "myGlobalIPName"
|
||||||
|
listeners:
|
||||||
|
- name: https
|
||||||
|
protocol: HTTPS
|
||||||
|
port: 443
|
||||||
|
- apiVersion: gateway.networking.k8s.io/v1beta1
|
||||||
|
kind: HTTPRoute
|
||||||
|
metadata:
|
||||||
|
name: traefik
|
||||||
|
spec:
|
||||||
|
parentRefs:
|
||||||
|
- kind: Gateway
|
||||||
|
name: traefik
|
||||||
|
rules:
|
||||||
|
- backendRefs:
|
||||||
|
- name: traefik
|
||||||
|
port: 443
|
||||||
|
- apiVersion: networking.gke.io/v1
|
||||||
|
kind: HealthCheckPolicy
|
||||||
|
metadata:
|
||||||
|
name: traefik
|
||||||
|
spec:
|
||||||
|
default:
|
||||||
|
config:
|
||||||
|
type: HTTP
|
||||||
|
httpHealthCheck:
|
||||||
|
port: 9000
|
||||||
|
requestPath: /ping
|
||||||
|
targetRef:
|
||||||
|
group: ""
|
||||||
|
kind: Service
|
||||||
|
name: traefik
|
||||||
|
```
|
||||||
|
|
||||||
|
# Install on Azure
|
||||||
|
|
||||||
|
A [static IP on a resource group](https://learn.microsoft.com/en-us/azure/aks/static-ip) can be used:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
service:
|
||||||
|
spec:
|
||||||
|
loadBalancerIP: "1.2.3.4"
|
||||||
|
annotations:
|
||||||
|
service.beta.kubernetes.io/azure-load-balancer-resource-group: myResourceGroup
|
||||||
|
```
|
||||||
|
|
||||||
|
# Use HTTP3
|
||||||
|
|
||||||
|
By default, it will use a Load balancers with mixed protocols on `websecure`
|
||||||
|
entrypoint. They are available since v1.20 and in beta as of Kubernetes v1.24.
|
||||||
|
Availability may depend on your Kubernetes provider.
|
||||||
|
|
||||||
|
When using TCP and UDP with a single service, you may encounter [this issue](https://github.com/kubernetes/kubernetes/issues/47249#issuecomment-587960741) from Kubernetes.
|
||||||
|
If you want to avoid this issue, you can set `ports.websecure.http3.advertisedPort`
|
||||||
|
to an other value than 443
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
ports:
|
||||||
|
websecure:
|
||||||
|
http3:
|
||||||
|
enabled: true
|
||||||
|
```
|
||||||
|
|
||||||
|
# Use ProxyProtocol on Digital Ocean
|
||||||
|
|
||||||
|
PROXY protocol is a protocol for sending client connection information, such as origin IP addresses and port numbers, to the final backend server, rather than discarding it at the load balancer.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
service:
|
||||||
|
enabled: true
|
||||||
|
type: LoadBalancer
|
||||||
|
annotations:
|
||||||
|
# This will tell DigitalOcean to enable the proxy protocol.
|
||||||
|
service.beta.kubernetes.io/do-loadbalancer-enable-proxy-protocol: "true"
|
||||||
|
spec:
|
||||||
|
# This is the default and should stay as cluster to keep the DO health checks working.
|
||||||
|
externalTrafficPolicy: Cluster
|
||||||
|
|
||||||
|
additionalArguments:
|
||||||
|
# Tell Traefik to only trust incoming headers from the Digital Ocean Load Balancers.
|
||||||
|
- "--entryPoints.web.proxyProtocol.trustedIPs=127.0.0.1/32,10.120.0.0/16"
|
||||||
|
- "--entryPoints.websecure.proxyProtocol.trustedIPs=127.0.0.1/32,10.120.0.0/16"
|
||||||
|
# Also whitelist the source of headers to trust, the private IPs on the load balancers displayed on the networking page of DO.
|
||||||
|
- "--entryPoints.web.forwardedHeaders.trustedIPs=127.0.0.1/32,10.120.0.0/16"
|
||||||
|
- "--entryPoints.websecure.forwardedHeaders.trustedIPs=127.0.0.1/32,10.120.0.0/16"
|
||||||
|
```
|
||||||
|
|
||||||
|
# Enable plugin storage
|
||||||
|
|
||||||
|
This chart follows common security practices: it runs as non root with a readonly root filesystem.
|
||||||
|
When enabling a plugin which needs storage, you have to add it to the deployment.
|
||||||
|
|
||||||
|
Here is a simple example with crowdsec. You may want to replace with your plugin or see complete exemple on crowdsec [here](https://github.com/maxlerebourg/crowdsec-bouncer-traefik-plugin/blob/main/exemples/kubernetes/README.md).
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
deployment:
|
||||||
|
additionalVolumes:
|
||||||
|
- name: plugins
|
||||||
|
additionalVolumeMounts:
|
||||||
|
- name: plugins
|
||||||
|
mountPath: /plugins-storage
|
||||||
|
additionalArguments:
|
||||||
|
- "--experimental.plugins.bouncer.moduleName=github.com/maxlerebourg/crowdsec-bouncer-traefik-plugin"
|
||||||
|
- "--experimental.plugins.bouncer.version=v1.1.9"
|
||||||
|
```
|
||||||
|
|
||||||
|
# Use Traefik native Let's Encrypt integration, without cert-manager
|
||||||
|
|
||||||
|
In Traefik Proxy, ACME certificates are stored in a JSON file.
|
||||||
|
|
||||||
|
This file needs to have 0600 permissions, meaning, only the owner of the file has full read and write access to it.
|
||||||
|
By default, Kubernetes recursively changes ownership and permissions for the content of each volume.
|
||||||
|
|
||||||
|
=> An initContainer can be used to avoid an issue on this sensitive file.
|
||||||
|
See [#396](https://github.com/traefik/traefik-helm-chart/issues/396) for more details.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
persistence:
|
||||||
|
enabled: true
|
||||||
|
storageClass: xxx
|
||||||
|
certResolvers:
|
||||||
|
letsencrypt:
|
||||||
|
dnsChallenge:
|
||||||
|
provider: cloudflare
|
||||||
|
storage: /data/acme.json
|
||||||
|
env:
|
||||||
|
- name: CF_DNS_API_TOKEN
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: yyy
|
||||||
|
key: zzz
|
||||||
|
deployment:
|
||||||
|
initContainers:
|
||||||
|
- name: volume-permissions
|
||||||
|
image: busybox:latest
|
||||||
|
command: ["sh", "-c", "touch /data/acme.json; chmod -v 600 /data/acme.json"]
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /data
|
||||||
|
name: data
|
||||||
|
```
|
||||||
|
|
||||||
|
This example needs a CloudFlare token in a Kubernetes `Secret` and a working `StorageClass`.
|
||||||
|
|
||||||
|
See [the list of supported providers](https://doc.traefik.io/traefik/https/acme/#providers) for others.
|
||||||
|
|
||||||
|
# Provide default certificate with cert-manager and CloudFlare DNS
|
||||||
|
|
||||||
|
Setup:
|
||||||
|
|
||||||
|
* cert-manager installed in `cert-manager` namespace
|
||||||
|
* A cloudflare account on a DNS Zone
|
||||||
|
|
||||||
|
**Step 1**: Create `Secret` and `Issuer` needed by `cert-manager` with your API Token.
|
||||||
|
See [cert-manager documentation](https://cert-manager.io/docs/configuration/acme/dns01/cloudflare/)
|
||||||
|
for creating this token with needed rights:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
name: cloudflare
|
||||||
|
namespace: traefik
|
||||||
|
type: Opaque
|
||||||
|
stringData:
|
||||||
|
api-token: XXX
|
||||||
|
---
|
||||||
|
apiVersion: cert-manager.io/v1
|
||||||
|
kind: Issuer
|
||||||
|
metadata:
|
||||||
|
name: cloudflare
|
||||||
|
namespace: traefik
|
||||||
|
spec:
|
||||||
|
acme:
|
||||||
|
server: https://acme-v02.api.letsencrypt.org/directory
|
||||||
|
email: email@example.com
|
||||||
|
privateKeySecretRef:
|
||||||
|
name: cloudflare-key
|
||||||
|
solvers:
|
||||||
|
- dns01:
|
||||||
|
cloudflare:
|
||||||
|
apiTokenSecretRef:
|
||||||
|
name: cloudflare
|
||||||
|
key: api-token
|
||||||
|
```
|
||||||
|
|
||||||
|
**Step 2**: Create `Certificate` in traefik namespace
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: cert-manager.io/v1
|
||||||
|
kind: Certificate
|
||||||
|
metadata:
|
||||||
|
name: wildcard-example-com
|
||||||
|
namespace: traefik
|
||||||
|
spec:
|
||||||
|
secretName: wildcard-example-com-tls
|
||||||
|
dnsNames:
|
||||||
|
- "example.com"
|
||||||
|
- "*.example.com"
|
||||||
|
issuerRef:
|
||||||
|
name: cloudflare
|
||||||
|
kind: Issuer
|
||||||
|
```
|
||||||
|
|
||||||
|
**Step 3**: Check that it's ready
|
||||||
|
|
||||||
|
```bash
|
||||||
|
kubectl get certificate -n traefik
|
||||||
|
```
|
||||||
|
|
||||||
|
If needed, logs of cert-manager pod can give you more information
|
||||||
|
|
||||||
|
**Step 4**: Use it on the TLS Store in **values.yaml** file for this Helm Chart
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
tlsStore:
|
||||||
|
default:
|
||||||
|
defaultCertificate:
|
||||||
|
secretName: wildcard-example-com-tls
|
||||||
|
```
|
||||||
|
|
||||||
|
**Step 5**: Enjoy. All your `IngressRoute` use this certificate by default now.
|
||||||
|
|
||||||
|
They should use websecure entrypoint like this:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
apiVersion: traefik.io/v1alpha1
|
||||||
|
kind: IngressRoute
|
||||||
|
metadata:
|
||||||
|
name: example-com-tls
|
||||||
|
spec:
|
||||||
|
entryPoints:
|
||||||
|
- websecure
|
||||||
|
routes:
|
||||||
|
- match: Host(`test.example.com`)
|
||||||
|
kind: Rule
|
||||||
|
services:
|
||||||
|
- name: XXXX
|
||||||
|
port: 80
|
||||||
|
```
|
||||||
|
|
||||||
|
# Use this Chart as a dependency of your own chart
|
||||||
|
|
||||||
|
|
||||||
|
First, let's create a default Helm Chart, with Traefik as a dependency.
|
||||||
|
```bash
|
||||||
|
helm create foo
|
||||||
|
cd foo
|
||||||
|
echo "
|
||||||
|
dependencies:
|
||||||
|
- name: traefik
|
||||||
|
version: "24.0.0"
|
||||||
|
repository: "https://traefik.github.io/charts"
|
||||||
|
" >> Chart.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
Second, let's tune some values like enabling HPA:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cat <<-EOF >> values.yaml
|
||||||
|
traefik:
|
||||||
|
autoscaling:
|
||||||
|
enabled: true
|
||||||
|
maxReplicas: 3
|
||||||
|
EOF
|
||||||
|
```
|
||||||
|
|
||||||
|
Third, one can see if it works as expected:
|
||||||
|
```bash
|
||||||
|
helm dependency update
|
||||||
|
helm dependency build
|
||||||
|
helm template . | grep -A 14 -B 3 Horizontal
|
||||||
|
```
|
||||||
|
|
||||||
|
It should produce this output:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
---
|
||||||
|
# Source: foo/charts/traefik/templates/hpa.yaml
|
||||||
|
apiVersion: autoscaling/v2
|
||||||
|
kind: HorizontalPodAutoscaler
|
||||||
|
metadata:
|
||||||
|
name: release-name-traefik
|
||||||
|
namespace: flux-system
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: traefik
|
||||||
|
app.kubernetes.io/instance: release-name-flux-system
|
||||||
|
helm.sh/chart: traefik-24.0.0
|
||||||
|
app.kubernetes.io/managed-by: Helm
|
||||||
|
spec:
|
||||||
|
scaleTargetRef:
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
name: release-name-traefik
|
||||||
|
maxReplicas: 3
|
||||||
|
```
|
92
traefik/base/charts/traefik/Guidelines.md
Normal file
92
traefik/base/charts/traefik/Guidelines.md
Normal file
|
@ -0,0 +1,92 @@
|
||||||
|
# Traefik Helm Chart Guidelines
|
||||||
|
|
||||||
|
This document outlines the guidelines for developing, managing and extending the Traefik helm chart.
|
||||||
|
|
||||||
|
This Helm Chart is documented using field description from comments with [helm-docs](https://github.com/norwoodj/helm-docs).
|
||||||
|
|
||||||
|
Optionallity
|
||||||
|
All non-critical features (Features not mandatory to starting Traefik) in the helm chart must be optional. All non-critical features should be disabled (commented out) in the values.yaml file. All optional non-critical features should be disabled (commented out) in the values.yaml file, and have a comment # (Optional) in the line above. This allows minimal configuration, and ease of extension.
|
||||||
|
|
||||||
|
## Feature Example
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
image:
|
||||||
|
# -- Traefik image host registry
|
||||||
|
registry: docker.io
|
||||||
|
```
|
||||||
|
|
||||||
|
This feature is expected and therefore is defined clearly in the values.yaml file.
|
||||||
|
|
||||||
|
## Optional Feature Example
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# storage:
|
||||||
|
# controlNode:
|
||||||
|
# type: emptyDir
|
||||||
|
```
|
||||||
|
|
||||||
|
This feature is optional, non-critical, and therefore is commented out by default in the values.yaml file.
|
||||||
|
|
||||||
|
To allow this, template blocks that use this need to recursively test for existence of values before using them:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
{{- if .Values.storage}}
|
||||||
|
{{- if .Values.storage.controlNode }}
|
||||||
|
//code
|
||||||
|
{{ .Values.storage.controlNode.type }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
```
|
||||||
|
|
||||||
|
The non-critical feature defaults should be populated so that they can be enabled by simply uncommenting the section in the values.yaml file.
|
||||||
|
|
||||||
|
## Optional Non-Critical Feature Example
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# storage:
|
||||||
|
# controlNode:
|
||||||
|
# type: emptyDir
|
||||||
|
# # (Optional)
|
||||||
|
# # volume: 1Gi
|
||||||
|
```
|
||||||
|
|
||||||
|
The volume option is clearly optional, and non-critical. It is commented out (apart from the storage section comment block), and is also preceeded by a comment of # (Optional) in the preceeding line. This facilitates configuration, when the storage section is uncommented, the optional features are still disabled by default.
|
||||||
|
|
||||||
|
Similar to non-critical feaures, these options need to be tested for existance before use in the template.
|
||||||
|
|
||||||
|
Note
|
||||||
|
There can be optional values in critical features. These should just be added as an uncommented non-critical feature:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
image:
|
||||||
|
name: traefik
|
||||||
|
tag: 2.0.0
|
||||||
|
# (Optional)
|
||||||
|
# pullPolicy: IfNotPresent
|
||||||
|
```
|
||||||
|
|
||||||
|
Also, the first value under the primary value key does not require an optional comment:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# ports:
|
||||||
|
# http: 80
|
||||||
|
# # (Optional)
|
||||||
|
# # https: 443
|
||||||
|
```
|
||||||
|
|
||||||
|
This is because if the main subkey is not defined, the entirety of the feature is optional.
|
||||||
|
|
||||||
|
## Whitespace
|
||||||
|
|
||||||
|
Extra whitespace is to be avoided in templating. Conditionals should chomp whitespace:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
{{- if .Values }}
|
||||||
|
{{- end }}
|
||||||
|
```
|
||||||
|
|
||||||
|
There should be an empty commented line between each primary key in the values.yaml file to separate features from each other.
|
||||||
|
|
||||||
|
## Values YAML Design
|
||||||
|
|
||||||
|
The values.yaml file is designed to be user-friendly. It does not have to resemble the templated configuration if it is not conducive. Similarly, value names to not have to correspond to fields in the tempate if it is not condusive.
|
202
traefik/base/charts/traefik/LICENSE
Normal file
202
traefik/base/charts/traefik/LICENSE
Normal file
|
@ -0,0 +1,202 @@
|
||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
APPENDIX: How to apply the Apache License to your work.
|
||||||
|
|
||||||
|
To apply the Apache License to your work, attach the following
|
||||||
|
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||||
|
replaced with your own identifying information. (Don't include
|
||||||
|
the brackets!) The text should be enclosed in the appropriate
|
||||||
|
comment syntax for the file format. We also recommend that a
|
||||||
|
file or class name and description of purpose be included on the
|
||||||
|
same "printed page" as the copyright notice for easier
|
||||||
|
identification within third-party archives.
|
||||||
|
|
||||||
|
Copyright 2020 Containous
|
||||||
|
Copyright 2020 Traefik Labs
|
||||||
|
|
||||||
|
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.
|
144
traefik/base/charts/traefik/README.md
Normal file
144
traefik/base/charts/traefik/README.md
Normal file
|
@ -0,0 +1,144 @@
|
||||||
|
# Traefik
|
||||||
|
|
||||||
|
[Traefik](https://traefik.io/) is a modern HTTP reverse proxy and load balancer made to deploy
|
||||||
|
microservices with ease.
|
||||||
|
|
||||||
|
## Introduction
|
||||||
|
|
||||||
|
This chart bootstraps Traefik version 2 as a Kubernetes ingress controller,
|
||||||
|
using Custom Resources `IngressRoute`: <https://docs.traefik.io/providers/kubernetes-crd/>.
|
||||||
|
|
||||||
|
It's now possible to use this chart with Traefik v3 (current tested with beta3).
|
||||||
|
Helm will auto detect which version is used based on image.tag. Set image.tag to a semver higher than 3.0, e.g. "v3.0.0-beta3".
|
||||||
|
See [Migration guide from v2 to v3](https://doc.traefik.io/traefik/v3.0/migration/v2-to-v3/) and upgrading section of this chart on CRDs.
|
||||||
|
|
||||||
|
### Philosophy
|
||||||
|
|
||||||
|
The Traefik HelmChart is focused on Traefik deployment configuration.
|
||||||
|
|
||||||
|
To keep this HelmChart as generic as possible we tend
|
||||||
|
to avoid integrating any third party solutions nor any specific use cases.
|
||||||
|
|
||||||
|
Accordingly, the encouraged approach to fulfill your needs:
|
||||||
|
|
||||||
|
1. Override the default Traefik configuration values ([yaml file or cli](https://helm.sh/docs/chart_template_guide/values_files/))
|
||||||
|
2. Append your own configurations (`kubectl apply -f myconf.yaml`)
|
||||||
|
|
||||||
|
If needed, one may use [extraObjects](./traefik/tests/values/extra.yaml) or extend this HelmChart [as a Subchart](https://helm.sh/docs/chart_template_guide/subcharts_and_globals/). In the [examples](EXAMPLES.md), one can see how to use this Chart as a dependency.
|
||||||
|
|
||||||
|
## Installing
|
||||||
|
|
||||||
|
### Prerequisites
|
||||||
|
|
||||||
|
1. [x] Helm **v3 > 3.9.0** [installed](https://helm.sh/docs/using_helm/#installing-helm): `helm version`
|
||||||
|
2. [x] Traefik's chart repository: `helm repo add traefik https://traefik.github.io/charts`
|
||||||
|
|
||||||
|
### Kubernetes Version Support
|
||||||
|
|
||||||
|
Due to changes in CRD version support, the following versions of the chart are usable and supported on the following Kubernetes versions:
|
||||||
|
|
||||||
|
| | Kubernetes v1.15 and below | Kubernetes v1.16-v1.21 | Kubernetes v1.22 and above |
|
||||||
|
|-------------------------|-----------------------------|------------------------|----------------------------|
|
||||||
|
| Chart v9.20.2 and below | [x] | [x] | |
|
||||||
|
| Chart v10.0.0 and above | | [x] | [x] |
|
||||||
|
| Chart v22.0.0 and above | | | [x] |
|
||||||
|
|
||||||
|
### CRDs Support of Traefik Proxy
|
||||||
|
|
||||||
|
Due to changes in API Group of Traefik CRDs from `containo.us` to `traefik.io`, this Chart install the two CRDs API Group on the following versions:
|
||||||
|
|
||||||
|
| | `containo.us` | `traefik.io` |
|
||||||
|
|-------------------------|-----------------------------|------------------------|
|
||||||
|
| Chart v22.0.0 and below | [x] | |
|
||||||
|
| Chart v23.0.0 and above | [x] | [x] |
|
||||||
|
|
||||||
|
### Deploying Traefik
|
||||||
|
|
||||||
|
```bash
|
||||||
|
helm install traefik traefik/traefik
|
||||||
|
```
|
||||||
|
|
||||||
|
You can customize the install with a `values` file. There are some [EXAMPLES](./EXAMPLES.md) provided.
|
||||||
|
Complete documentation on all available parameters is in the [default file](./traefik/values.yaml).
|
||||||
|
|
||||||
|
```bash
|
||||||
|
helm install -f myvalues.yaml traefik traefik/traefik
|
||||||
|
```
|
||||||
|
|
||||||
|
🛂 **Warning**: Helm v2 support was removed in the chart version 10.0.0.
|
||||||
|
|
||||||
|
## Upgrading
|
||||||
|
|
||||||
|
One can check what has changed in the [Changelog](./traefik/Changelog.md).
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Update repository
|
||||||
|
helm repo update
|
||||||
|
# See current Chart & Traefik version
|
||||||
|
helm search repo traefik/traefik
|
||||||
|
# Upgrade Traefik
|
||||||
|
helm upgrade traefik traefik/traefik
|
||||||
|
```
|
||||||
|
|
||||||
|
New major version indicates that there is an incompatible breaking change.
|
||||||
|
|
||||||
|
### Upgrading CRDs
|
||||||
|
|
||||||
|
🛂 **Warning**: Traefik v3 totally removes the crd support for traefik.containo.us CRDs. By default this helm installs the CRDs compatible with v2 also, but Traefik v3 will no longer monitor them. There is no support for deprecation errors, so your existing resources may silently fail to work after upgrade to Traefik v3. See [Migration guide from v2 to v3](https://doc.traefik.io/traefik/v3.0/migration/v2-to-v3/) for more details.
|
||||||
|
|
||||||
|
With Helm v3, CRDs created by this chart can not be updated, cf the [Helm Documentation on CRDs](https://helm.sh/docs/chart_best_practices/custom_resource_definitions). Please read carefully release notes of this chart before upgrading CRDs.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
kubectl apply --server-side --force-conflicts -k https://github.com/traefik/traefik-helm-chart/traefik/crds/
|
||||||
|
```
|
||||||
|
|
||||||
|
### Upgrading after 18.X+
|
||||||
|
|
||||||
|
It's detailed in [release notes](https://github.com/traefik/traefik-helm-chart/releases).
|
||||||
|
|
||||||
|
### Upgrading from 17.x to 18.x
|
||||||
|
|
||||||
|
Since v18.x, this chart by default merges TCP and UDP ports into a single (LoadBalancer) `Service`.
|
||||||
|
Load balancers with mixed protocols are available since v1.20 and in
|
||||||
|
[beta as of Kubernetes v1.24](https://kubernetes.io/docs/concepts/services-networking/service/#load-balancers-with-mixed-protocol-types).
|
||||||
|
Availability may depend on your Kubernetes provider.
|
||||||
|
|
||||||
|
To retain the old default behavior, set `service.single` to `false` in your values.
|
||||||
|
|
||||||
|
When using TCP and UDP with a single service, you may encounter
|
||||||
|
[this issue](https://github.com/kubernetes/kubernetes/issues/47249#issuecomment-587960741)
|
||||||
|
from Kubernetes.
|
||||||
|
|
||||||
|
On HTTP/3, if you want to avoid this issue, you can set
|
||||||
|
`ports.websecure.http3.advertisedPort` to an other value than `443`
|
||||||
|
|
||||||
|
If you were previously using HTTP/3, you should update your values as follows:
|
||||||
|
- Replace the old value (`true`) of `ports.websecure.http3` with a key `enabled: true`
|
||||||
|
- Remove `experimental.http3.enabled=true` entry
|
||||||
|
|
||||||
|
### Upgrading from 16.x to 17.x
|
||||||
|
|
||||||
|
Since v17.x, this chart provides unified labels following
|
||||||
|
[Kubernetes recommendation](https://kubernetes.io/docs/concepts/overview/working-with-objects/common-labels/).
|
||||||
|
|
||||||
|
This version needs to change an immutable field, which is not supported by
|
||||||
|
Kubernetes and Helm, see [this issue](https://github.com/helm/helm/issues/7350)
|
||||||
|
for more details.
|
||||||
|
So you will have to delete your `Service`, `Deployment` or `DaemonSet` in
|
||||||
|
order to be able to upgrade.
|
||||||
|
|
||||||
|
You may also upgrade by deploying another Traefik to a different namespace and
|
||||||
|
removing after your first Traefik.
|
||||||
|
|
||||||
|
Alternatively, since version 20.3.0 of this chart, you may set `instanceLabelOverride` to the previous value of that label.
|
||||||
|
This will override the new `Release.Name-Release.Namespace` pattern to avoid any (longer) downtime.
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
If you want to contribute to this chart, please read the [Contributing Guide](./CONTRIBUTING.md).
|
||||||
|
|
||||||
|
Thanks to all the people who have already contributed!
|
||||||
|
|
||||||
|
<a href="https://github.com/traefik/traefik-helm-chart/graphs/contributors">
|
||||||
|
<img src="https://contributors-img.web.app/image?repo=traefik/traefik-helm-chart" />
|
||||||
|
</a>
|
178
traefik/base/charts/traefik/VALUES.md
Normal file
178
traefik/base/charts/traefik/VALUES.md
Normal file
|
@ -0,0 +1,178 @@
|
||||||
|
# traefik
|
||||||
|
|
||||||
|
![Version: 26.1.0](https://img.shields.io/badge/Version-26.1.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: v2.11.0](https://img.shields.io/badge/AppVersion-v2.11.0-informational?style=flat-square)
|
||||||
|
|
||||||
|
A Traefik based Kubernetes ingress controller
|
||||||
|
|
||||||
|
**Homepage:** <https://traefik.io/>
|
||||||
|
|
||||||
|
## Maintainers
|
||||||
|
|
||||||
|
| Name | Email | Url |
|
||||||
|
| ---- | ------ | --- |
|
||||||
|
| mloiseleur | <michel.loiseleur@traefik.io> | |
|
||||||
|
| charlie-haley | <charlie.haley@traefik.io> | |
|
||||||
|
| darkweaver87 | <remi.buisson@traefik.io> | |
|
||||||
|
| jnoordsij | | |
|
||||||
|
|
||||||
|
## Source Code
|
||||||
|
|
||||||
|
* <https://github.com/traefik/traefik>
|
||||||
|
* <https://github.com/traefik/traefik-helm-chart>
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
Kubernetes: `>=1.16.0-0`
|
||||||
|
|
||||||
|
## Values
|
||||||
|
|
||||||
|
| Key | Type | Default | Description |
|
||||||
|
|-----|------|---------|-------------|
|
||||||
|
| additionalArguments | list | `[]` | Additional arguments to be passed at Traefik's binary All available options available on https://docs.traefik.io/reference/static-configuration/cli/ # Use curly braces to pass values: `helm install --set="additionalArguments={--providers.kubernetesingress.ingressclass=traefik-internal,--log.level=DEBUG}"` |
|
||||||
|
| additionalVolumeMounts | list | `[]` | Additional volumeMounts to add to the Traefik container |
|
||||||
|
| affinity | object | `{}` | on nodes where no other traefik pods are scheduled. It should be used when hostNetwork: true to prevent port conflicts |
|
||||||
|
| autoscaling.enabled | bool | `false` | Create HorizontalPodAutoscaler object. |
|
||||||
|
| certResolvers | object | `{}` | Certificates resolvers configuration |
|
||||||
|
| commonLabels | object | `{}` | Add additional label to all resources |
|
||||||
|
| deployment.additionalContainers | list | `[]` | Additional containers (e.g. for metric offloading sidecars) |
|
||||||
|
| deployment.additionalVolumes | list | `[]` | Additional volumes available for use with initContainers and additionalContainers |
|
||||||
|
| deployment.annotations | object | `{}` | Additional deployment annotations (e.g. for jaeger-operator sidecar injection) |
|
||||||
|
| deployment.dnsConfig | object | `{}` | Custom pod DNS policy. Apply if `hostNetwork: true` dnsPolicy: ClusterFirstWithHostNet |
|
||||||
|
| deployment.enabled | bool | `true` | Enable deployment |
|
||||||
|
| deployment.imagePullSecrets | list | `[]` | Additional imagePullSecrets |
|
||||||
|
| deployment.initContainers | list | `[]` | Additional initContainers (e.g. for setting file permission as shown below) |
|
||||||
|
| deployment.kind | string | `"Deployment"` | Deployment or DaemonSet |
|
||||||
|
| deployment.labels | object | `{}` | Additional deployment labels (e.g. for filtering deployment by custom labels) |
|
||||||
|
| deployment.lifecycle | object | `{}` | Pod lifecycle actions |
|
||||||
|
| deployment.minReadySeconds | int | `0` | The minimum number of seconds Traefik needs to be up and running before the DaemonSet/Deployment controller considers it available |
|
||||||
|
| deployment.podAnnotations | object | `{}` | Additional pod annotations (e.g. for mesh injection or prometheus scraping) It supports templating. One can set it with values like traefik/name: '{{ template "traefik.name" . }}' |
|
||||||
|
| deployment.podLabels | object | `{}` | Additional Pod labels (e.g. for filtering Pod by custom labels) |
|
||||||
|
| deployment.replicas | int | `1` | Number of pods of the deployment (only applies when kind == Deployment) |
|
||||||
|
| deployment.runtimeClassName | string | `nil` | Set a runtimeClassName on pod |
|
||||||
|
| deployment.shareProcessNamespace | bool | `false` | Use process namespace sharing |
|
||||||
|
| deployment.terminationGracePeriodSeconds | int | `60` | Amount of time (in seconds) before Kubernetes will send the SIGKILL signal if Traefik does not shut down |
|
||||||
|
| env | list | `[{"name":"POD_NAME","valueFrom":{"fieldRef":{"fieldPath":"metadata.name"}}},{"name":"POD_NAMESPACE","valueFrom":{"fieldRef":{"fieldPath":"metadata.namespace"}}}]` | Environment variables to be passed to Traefik's binary |
|
||||||
|
| envFrom | list | `[]` | Environment variables to be passed to Traefik's binary from configMaps or secrets |
|
||||||
|
| experimental.kubernetesGateway.enabled | bool | `false` | Enable traefik experimental GatewayClass CRD |
|
||||||
|
| experimental.plugins | object | `{}` | Enable traefik experimental plugins |
|
||||||
|
| extraObjects | list | `[]` | Extra objects to deploy (value evaluated as a template) In some cases, it can avoid the need for additional, extended or adhoc deployments. See #595 for more details and traefik/tests/values/extra.yaml for example. |
|
||||||
|
| globalArguments | list | `["--global.checknewversion","--global.sendanonymoususage"]` | Global command arguments to be passed to all traefik's pods |
|
||||||
|
| hostNetwork | bool | `false` | If hostNetwork is true, runs traefik in the host network namespace To prevent unschedulabel pods due to port collisions, if hostNetwork=true and replicas>1, a pod anti-affinity is recommended and will be set if the affinity is left as default. |
|
||||||
|
| image.pullPolicy | string | `"IfNotPresent"` | Traefik image pull policy |
|
||||||
|
| image.registry | string | `"docker.io"` | Traefik image host registry |
|
||||||
|
| image.repository | string | `"traefik"` | Traefik image repository |
|
||||||
|
| image.tag | string | `""` | defaults to appVersion |
|
||||||
|
| ingressClass | object | `{"enabled":true,"isDefaultClass":true}` | Create a default IngressClass for Traefik |
|
||||||
|
| ingressRoute.dashboard.annotations | object | `{}` | Additional ingressRoute annotations (e.g. for kubernetes.io/ingress.class) |
|
||||||
|
| ingressRoute.dashboard.enabled | bool | `true` | Create an IngressRoute for the dashboard |
|
||||||
|
| ingressRoute.dashboard.entryPoints | list | `["traefik"]` | Specify the allowed entrypoints to use for the dashboard ingress route, (e.g. traefik, web, websecure). By default, it's using traefik entrypoint, which is not exposed. /!\ Do not expose your dashboard without any protection over the internet /!\ |
|
||||||
|
| ingressRoute.dashboard.labels | object | `{}` | Additional ingressRoute labels (e.g. for filtering IngressRoute by custom labels) |
|
||||||
|
| ingressRoute.dashboard.matchRule | string | `"PathPrefix(`/dashboard`) || PathPrefix(`/api`)"` | The router match rule used for the dashboard ingressRoute |
|
||||||
|
| ingressRoute.dashboard.middlewares | list | `[]` | Additional ingressRoute middlewares (e.g. for authentication) |
|
||||||
|
| ingressRoute.dashboard.tls | object | `{}` | TLS options (e.g. secret containing certificate) |
|
||||||
|
| ingressRoute.healthcheck.annotations | object | `{}` | Additional ingressRoute annotations (e.g. for kubernetes.io/ingress.class) |
|
||||||
|
| ingressRoute.healthcheck.enabled | bool | `false` | Create an IngressRoute for the healthcheck probe |
|
||||||
|
| ingressRoute.healthcheck.entryPoints | list | `["traefik"]` | Specify the allowed entrypoints to use for the healthcheck ingress route, (e.g. traefik, web, websecure). By default, it's using traefik entrypoint, which is not exposed. |
|
||||||
|
| ingressRoute.healthcheck.labels | object | `{}` | Additional ingressRoute labels (e.g. for filtering IngressRoute by custom labels) |
|
||||||
|
| ingressRoute.healthcheck.matchRule | string | `"PathPrefix(`/ping`)"` | The router match rule used for the healthcheck ingressRoute |
|
||||||
|
| ingressRoute.healthcheck.middlewares | list | `[]` | Additional ingressRoute middlewares (e.g. for authentication) |
|
||||||
|
| ingressRoute.healthcheck.tls | object | `{}` | TLS options (e.g. secret containing certificate) |
|
||||||
|
| livenessProbe.failureThreshold | int | `3` | The number of consecutive failures allowed before considering the probe as failed. |
|
||||||
|
| livenessProbe.initialDelaySeconds | int | `2` | The number of seconds to wait before starting the first probe. |
|
||||||
|
| livenessProbe.periodSeconds | int | `10` | The number of seconds to wait between consecutive probes. |
|
||||||
|
| livenessProbe.successThreshold | int | `1` | The minimum consecutive successes required to consider the probe successful. |
|
||||||
|
| livenessProbe.timeoutSeconds | int | `2` | The number of seconds to wait for a probe response before considering it as failed. |
|
||||||
|
| logs.access.enabled | bool | `false` | To enable access logs |
|
||||||
|
| logs.access.fields.general.defaultmode | string | `"keep"` | Available modes: keep, drop, redact. |
|
||||||
|
| logs.access.fields.general.names | object | `{}` | Names of the fields to limit. |
|
||||||
|
| logs.access.fields.headers.defaultmode | string | `"drop"` | Available modes: keep, drop, redact. |
|
||||||
|
| logs.access.fields.headers.names | object | `{}` | Names of the headers to limit. |
|
||||||
|
| logs.access.filters | object | `{}` | https://docs.traefik.io/observability/access-logs/#filtering |
|
||||||
|
| logs.general.level | string | `"ERROR"` | Alternative logging levels are DEBUG, PANIC, FATAL, ERROR, WARN, and INFO. |
|
||||||
|
| metrics.prometheus.entryPoint | string | `"metrics"` | Entry point used to expose metrics. |
|
||||||
|
| nodeSelector | object | `{}` | nodeSelector is the simplest recommended form of node selection constraint. |
|
||||||
|
| persistence.accessMode | string | `"ReadWriteOnce"` | |
|
||||||
|
| persistence.annotations | object | `{}` | |
|
||||||
|
| persistence.enabled | bool | `false` | Enable persistence using Persistent Volume Claims ref: http://kubernetes.io/docs/user-guide/persistent-volumes/ It can be used to store TLS certificates, see `storage` in certResolvers |
|
||||||
|
| persistence.name | string | `"data"` | |
|
||||||
|
| persistence.path | string | `"/data"` | |
|
||||||
|
| persistence.size | string | `"128Mi"` | |
|
||||||
|
| podDisruptionBudget | object | `{"enabled":false}` | Pod disruption budget |
|
||||||
|
| podSecurityContext.fsGroupChangePolicy | string | `"OnRootMismatch"` | Specifies the policy for changing ownership and permissions of volume contents to match the fsGroup. |
|
||||||
|
| podSecurityContext.runAsGroup | int | `65532` | The ID of the group for all containers in the pod to run as. |
|
||||||
|
| podSecurityContext.runAsNonRoot | bool | `true` | Specifies whether the containers should run as a non-root user. |
|
||||||
|
| podSecurityContext.runAsUser | int | `65532` | The ID of the user for all containers in the pod to run as. |
|
||||||
|
| podSecurityPolicy | object | `{"enabled":false}` | Enable to create a PodSecurityPolicy and assign it to the Service Account via RoleBinding or ClusterRoleBinding |
|
||||||
|
| ports.metrics.expose | bool | `false` | You may not want to expose the metrics port on production deployments. If you want to access it from outside your cluster, use `kubectl port-forward` or create a secure ingress |
|
||||||
|
| ports.metrics.exposeInternal | bool | `false` | Defines whether the port is exposed on the internal service; note that ports exposed on the default service are exposed on the internal service by default as well. |
|
||||||
|
| ports.metrics.exposedPort | int | `9100` | The exposed port for this service |
|
||||||
|
| ports.metrics.port | int | `9100` | When using hostNetwork, use another port to avoid conflict with node exporter: https://github.com/prometheus/prometheus/wiki/Default-port-allocations |
|
||||||
|
| ports.metrics.protocol | string | `"TCP"` | The port protocol (TCP/UDP) |
|
||||||
|
| ports.traefik.expose | bool | `false` | You SHOULD NOT expose the traefik port on production deployments. If you want to access it from outside your cluster, use `kubectl port-forward` or create a secure ingress |
|
||||||
|
| ports.traefik.exposeInternal | bool | `false` | Defines whether the port is exposed on the internal service; note that ports exposed on the default service are exposed on the internal service by default as well. |
|
||||||
|
| ports.traefik.exposedPort | int | `9000` | The exposed port for this service |
|
||||||
|
| ports.traefik.port | int | `9000` | |
|
||||||
|
| ports.traefik.protocol | string | `"TCP"` | The port protocol (TCP/UDP) |
|
||||||
|
| ports.web.expose | bool | `true` | |
|
||||||
|
| ports.web.exposeInternal | bool | `false` | Defines whether the port is exposed on the internal service; note that ports exposed on the default service are exposed on the internal service by default as well. |
|
||||||
|
| ports.web.exposedPort | int | `80` | |
|
||||||
|
| ports.web.port | int | `8000` | |
|
||||||
|
| ports.web.protocol | string | `"TCP"` | |
|
||||||
|
| ports.websecure.expose | bool | `true` | |
|
||||||
|
| ports.websecure.exposeInternal | bool | `false` | Defines whether the port is exposed on the internal service; note that ports exposed on the default service are exposed on the internal service by default as well. |
|
||||||
|
| ports.websecure.exposedPort | int | `443` | |
|
||||||
|
| ports.websecure.http3.enabled | bool | `false` | |
|
||||||
|
| ports.websecure.middlewares | list | `[]` | /!\ It introduces here a link between your static configuration and your dynamic configuration /!\ It follows the provider naming convention: https://doc.traefik.io/traefik/providers/overview/#provider-namespace middlewares: - namespace-name1@kubernetescrd - namespace-name2@kubernetescrd |
|
||||||
|
| ports.websecure.port | int | `8443` | |
|
||||||
|
| ports.websecure.protocol | string | `"TCP"` | |
|
||||||
|
| ports.websecure.tls.certResolver | string | `""` | |
|
||||||
|
| ports.websecure.tls.domains | list | `[]` | |
|
||||||
|
| ports.websecure.tls.enabled | bool | `true` | |
|
||||||
|
| ports.websecure.tls.options | string | `""` | |
|
||||||
|
| priorityClassName | string | `""` | Priority indicates the importance of a Pod relative to other Pods. |
|
||||||
|
| providers.file.content | string | `""` | File content (YAML format, go template supported) (see https://doc.traefik.io/traefik/providers/file/) |
|
||||||
|
| providers.file.enabled | bool | `false` | Create a file provider |
|
||||||
|
| providers.file.watch | bool | `true` | Allows Traefik to automatically watch for file changes |
|
||||||
|
| providers.kubernetesCRD.allowCrossNamespace | bool | `false` | Allows IngressRoute to reference resources in namespace other than theirs |
|
||||||
|
| providers.kubernetesCRD.allowEmptyServices | bool | `false` | Allows to return 503 when there is no endpoints available |
|
||||||
|
| providers.kubernetesCRD.allowExternalNameServices | bool | `false` | Allows to reference ExternalName services in IngressRoute |
|
||||||
|
| providers.kubernetesCRD.enabled | bool | `true` | Load Kubernetes IngressRoute provider |
|
||||||
|
| providers.kubernetesCRD.namespaces | list | `[]` | Array of namespaces to watch. If left empty, Traefik watches all namespaces. |
|
||||||
|
| providers.kubernetesIngress.allowEmptyServices | bool | `false` | Allows to return 503 when there is no endpoints available |
|
||||||
|
| providers.kubernetesIngress.allowExternalNameServices | bool | `false` | Allows to reference ExternalName services in Ingress |
|
||||||
|
| providers.kubernetesIngress.enabled | bool | `true` | Load Kubernetes Ingress provider |
|
||||||
|
| providers.kubernetesIngress.namespaces | list | `[]` | Array of namespaces to watch. If left empty, Traefik watches all namespaces. |
|
||||||
|
| providers.kubernetesIngress.publishedService.enabled | bool | `false` | |
|
||||||
|
| rbac | object | `{"enabled":true,"namespaced":false}` | Whether Role Based Access Control objects like roles and rolebindings should be created |
|
||||||
|
| readinessProbe.failureThreshold | int | `1` | The number of consecutive failures allowed before considering the probe as failed. |
|
||||||
|
| readinessProbe.initialDelaySeconds | int | `2` | The number of seconds to wait before starting the first probe. |
|
||||||
|
| readinessProbe.periodSeconds | int | `10` | The number of seconds to wait between consecutive probes. |
|
||||||
|
| readinessProbe.successThreshold | int | `1` | The minimum consecutive successes required to consider the probe successful. |
|
||||||
|
| readinessProbe.timeoutSeconds | int | `2` | The number of seconds to wait for a probe response before considering it as failed. |
|
||||||
|
| resources | object | `{}` | The resources parameter defines CPU and memory requirements and limits for Traefik's containers. |
|
||||||
|
| securityContext | object | `{"allowPrivilegeEscalation":false,"capabilities":{"drop":["ALL"]},"readOnlyRootFilesystem":true}` | To run the container with ports below 1024 this will need to be adjusted to run as root |
|
||||||
|
| service.annotations | object | `{}` | Additional annotations applied to both TCP and UDP services (e.g. for cloud provider specific config) |
|
||||||
|
| service.annotationsTCP | object | `{}` | Additional annotations for TCP service only |
|
||||||
|
| service.annotationsUDP | object | `{}` | Additional annotations for UDP service only |
|
||||||
|
| service.enabled | bool | `true` | |
|
||||||
|
| service.externalIPs | list | `[]` | |
|
||||||
|
| service.labels | object | `{}` | Additional service labels (e.g. for filtering Service by custom labels) |
|
||||||
|
| service.loadBalancerSourceRanges | list | `[]` | |
|
||||||
|
| service.single | bool | `true` | |
|
||||||
|
| service.spec | object | `{}` | Cannot contain type, selector or ports entries. |
|
||||||
|
| service.type | string | `"LoadBalancer"` | |
|
||||||
|
| serviceAccount | object | `{"name":""}` | The service account the pods will use to interact with the Kubernetes API |
|
||||||
|
| serviceAccountAnnotations | object | `{}` | Additional serviceAccount annotations (e.g. for oidc authentication) |
|
||||||
|
| startupProbe | string | `nil` | Define Startup Probe for container: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#define-startup-probes eg. `startupProbe: exec: command: - mycommand - foo initialDelaySeconds: 5 periodSeconds: 5` |
|
||||||
|
| tlsOptions | object | `{}` | TLS Options are created as TLSOption CRDs https://doc.traefik.io/traefik/https/tls/#tls-options When using `labelSelector`, you'll need to set labels on tlsOption accordingly. Example: tlsOptions: default: labels: {} sniStrict: true preferServerCipherSuites: true custom-options: labels: {} curvePreferences: - CurveP521 - CurveP384 |
|
||||||
|
| tlsStore | object | `{}` | TLS Store are created as TLSStore CRDs. This is useful if you want to set a default certificate https://doc.traefik.io/traefik/https/tls/#default-certificate Example: tlsStore: default: defaultCertificate: secretName: tls-cert |
|
||||||
|
| tolerations | list | `[]` | Tolerations allow the scheduler to schedule pods with matching taints. |
|
||||||
|
| topologySpreadConstraints | list | `[]` | You can use topology spread constraints to control how Pods are spread across your cluster among failure-domains. |
|
||||||
|
| tracing | object | `{}` | https://doc.traefik.io/traefik/observability/tracing/overview/ |
|
||||||
|
| updateStrategy.rollingUpdate.maxSurge | int | `1` | |
|
||||||
|
| updateStrategy.rollingUpdate.maxUnavailable | int | `0` | |
|
||||||
|
| updateStrategy.type | string | `"RollingUpdate"` | Customize updateStrategy: RollingUpdate or OnDelete |
|
||||||
|
| volumes | list | `[]` | Add volumes to the traefik pod. The volume name will be passed to tpl. This can be used to mount a cert pair or a configmap that holds a config.toml file. After the volume has been mounted, add the configs into traefik by using the `additionalArguments` list below, eg: `additionalArguments: - "--providers.file.filename=/config/dynamic.toml" - "--ping" - "--ping.entrypoint=web"` |
|
||||||
|
|
||||||
|
----------------------------------------------
|
||||||
|
Autogenerated from chart metadata using [helm-docs v1.12.0](https://github.com/norwoodj/helm-docs/releases/v1.12.0)
|
|
@ -0,0 +1,287 @@
|
||||||
|
---
|
||||||
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
|
kind: CustomResourceDefinition
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
controller-gen.kubebuilder.io/version: v0.14.0
|
||||||
|
name: ingressroutes.traefik.containo.us
|
||||||
|
spec:
|
||||||
|
group: traefik.containo.us
|
||||||
|
names:
|
||||||
|
kind: IngressRoute
|
||||||
|
listKind: IngressRouteList
|
||||||
|
plural: ingressroutes
|
||||||
|
singular: ingressroute
|
||||||
|
scope: Namespaced
|
||||||
|
versions:
|
||||||
|
- name: v1alpha1
|
||||||
|
schema:
|
||||||
|
openAPIV3Schema:
|
||||||
|
description: IngressRoute is the CRD implementation of a Traefik HTTP Router.
|
||||||
|
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: IngressRouteSpec defines the desired state of IngressRoute.
|
||||||
|
properties:
|
||||||
|
entryPoints:
|
||||||
|
description: |-
|
||||||
|
EntryPoints defines the list of entry point names to bind to.
|
||||||
|
Entry points have to be configured in the static configuration.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/entrypoints/
|
||||||
|
Default: all.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
routes:
|
||||||
|
description: Routes defines the list of routes.
|
||||||
|
items:
|
||||||
|
description: Route holds the HTTP route configuration.
|
||||||
|
properties:
|
||||||
|
kind:
|
||||||
|
description: |-
|
||||||
|
Kind defines the kind of the route.
|
||||||
|
Rule is the only supported kind.
|
||||||
|
enum:
|
||||||
|
- Rule
|
||||||
|
type: string
|
||||||
|
match:
|
||||||
|
description: |-
|
||||||
|
Match defines the router's rule.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/routers/#rule
|
||||||
|
type: string
|
||||||
|
middlewares:
|
||||||
|
description: |-
|
||||||
|
Middlewares defines the list of references to Middleware resources.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/providers/kubernetes-crd/#kind-middleware
|
||||||
|
items:
|
||||||
|
description: MiddlewareRef is a reference to a Middleware
|
||||||
|
resource.
|
||||||
|
properties:
|
||||||
|
name:
|
||||||
|
description: Name defines the name of the referenced Middleware
|
||||||
|
resource.
|
||||||
|
type: string
|
||||||
|
namespace:
|
||||||
|
description: Namespace defines the namespace of the referenced
|
||||||
|
Middleware resource.
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- name
|
||||||
|
type: object
|
||||||
|
type: array
|
||||||
|
priority:
|
||||||
|
description: |-
|
||||||
|
Priority defines the router's priority.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/routers/#priority
|
||||||
|
type: integer
|
||||||
|
services:
|
||||||
|
description: |-
|
||||||
|
Services defines the list of Service.
|
||||||
|
It can contain any combination of TraefikService and/or reference to a Kubernetes Service.
|
||||||
|
items:
|
||||||
|
description: Service defines an upstream HTTP service to proxy
|
||||||
|
traffic to.
|
||||||
|
properties:
|
||||||
|
kind:
|
||||||
|
description: Kind defines the kind of the Service.
|
||||||
|
enum:
|
||||||
|
- Service
|
||||||
|
- TraefikService
|
||||||
|
type: string
|
||||||
|
name:
|
||||||
|
description: |-
|
||||||
|
Name defines the name of the referenced Kubernetes Service or TraefikService.
|
||||||
|
The differentiation between the two is specified in the Kind field.
|
||||||
|
type: string
|
||||||
|
namespace:
|
||||||
|
description: Namespace defines the namespace of the referenced
|
||||||
|
Kubernetes Service or TraefikService.
|
||||||
|
type: string
|
||||||
|
nativeLB:
|
||||||
|
description: |-
|
||||||
|
NativeLB controls, when creating the load-balancer,
|
||||||
|
whether the LB's children are directly the pods IPs or if the only child is the Kubernetes Service clusterIP.
|
||||||
|
The Kubernetes Service itself does load-balance to the pods.
|
||||||
|
By default, NativeLB is false.
|
||||||
|
type: boolean
|
||||||
|
passHostHeader:
|
||||||
|
description: |-
|
||||||
|
PassHostHeader defines whether the client Host header is forwarded to the upstream Kubernetes Service.
|
||||||
|
By default, passHostHeader is true.
|
||||||
|
type: boolean
|
||||||
|
port:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Port defines the port of a Kubernetes Service.
|
||||||
|
This can be a reference to a named port.
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
responseForwarding:
|
||||||
|
description: ResponseForwarding defines how Traefik forwards
|
||||||
|
the response from the upstream Kubernetes Service to
|
||||||
|
the client.
|
||||||
|
properties:
|
||||||
|
flushInterval:
|
||||||
|
description: |-
|
||||||
|
FlushInterval defines the interval, in milliseconds, in between flushes to the client while copying the response body.
|
||||||
|
A negative value means to flush immediately after each write to the client.
|
||||||
|
This configuration is ignored when ReverseProxy recognizes a response as a streaming response;
|
||||||
|
for such responses, writes are flushed to the client immediately.
|
||||||
|
Default: 100ms
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
scheme:
|
||||||
|
description: |-
|
||||||
|
Scheme defines the scheme to use for the request to the upstream Kubernetes Service.
|
||||||
|
It defaults to https when Kubernetes Service port is 443, http otherwise.
|
||||||
|
type: string
|
||||||
|
serversTransport:
|
||||||
|
description: |-
|
||||||
|
ServersTransport defines the name of ServersTransport resource to use.
|
||||||
|
It allows to configure the transport between Traefik and your servers.
|
||||||
|
Can only be used on a Kubernetes Service.
|
||||||
|
type: string
|
||||||
|
sticky:
|
||||||
|
description: |-
|
||||||
|
Sticky defines the sticky sessions configuration.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/services/#sticky-sessions
|
||||||
|
properties:
|
||||||
|
cookie:
|
||||||
|
description: Cookie defines the sticky cookie configuration.
|
||||||
|
properties:
|
||||||
|
httpOnly:
|
||||||
|
description: HTTPOnly defines whether the cookie
|
||||||
|
can be accessed by client-side APIs, such as
|
||||||
|
JavaScript.
|
||||||
|
type: boolean
|
||||||
|
name:
|
||||||
|
description: Name defines the Cookie name.
|
||||||
|
type: string
|
||||||
|
sameSite:
|
||||||
|
description: |-
|
||||||
|
SameSite defines the same site policy.
|
||||||
|
More info: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite
|
||||||
|
type: string
|
||||||
|
secure:
|
||||||
|
description: Secure defines whether the cookie
|
||||||
|
can only be transmitted over an encrypted connection
|
||||||
|
(i.e. HTTPS).
|
||||||
|
type: boolean
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
strategy:
|
||||||
|
description: |-
|
||||||
|
Strategy defines the load balancing strategy between the servers.
|
||||||
|
RoundRobin is the only supported value at the moment.
|
||||||
|
type: string
|
||||||
|
weight:
|
||||||
|
description: |-
|
||||||
|
Weight defines the weight and should only be specified when Name references a TraefikService object
|
||||||
|
(and to be precise, one that embeds a Weighted Round Robin).
|
||||||
|
type: integer
|
||||||
|
required:
|
||||||
|
- name
|
||||||
|
type: object
|
||||||
|
type: array
|
||||||
|
required:
|
||||||
|
- kind
|
||||||
|
- match
|
||||||
|
type: object
|
||||||
|
type: array
|
||||||
|
tls:
|
||||||
|
description: |-
|
||||||
|
TLS defines the TLS configuration.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/routers/#tls
|
||||||
|
properties:
|
||||||
|
certResolver:
|
||||||
|
description: |-
|
||||||
|
CertResolver defines the name of the certificate resolver to use.
|
||||||
|
Cert resolvers have to be configured in the static configuration.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/https/acme/#certificate-resolvers
|
||||||
|
type: string
|
||||||
|
domains:
|
||||||
|
description: |-
|
||||||
|
Domains defines the list of domains that will be used to issue certificates.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/routers/#domains
|
||||||
|
items:
|
||||||
|
description: Domain holds a domain name with SANs.
|
||||||
|
properties:
|
||||||
|
main:
|
||||||
|
description: Main defines the main domain name.
|
||||||
|
type: string
|
||||||
|
sans:
|
||||||
|
description: SANs defines the subject alternative domain
|
||||||
|
names.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
type: object
|
||||||
|
type: array
|
||||||
|
options:
|
||||||
|
description: |-
|
||||||
|
Options defines the reference to a TLSOption, that specifies the parameters of the TLS connection.
|
||||||
|
If not defined, the `default` TLSOption is used.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/https/tls/#tls-options
|
||||||
|
properties:
|
||||||
|
name:
|
||||||
|
description: |-
|
||||||
|
Name defines the name of the referenced TLSOption.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/providers/kubernetes-crd/#kind-tlsoption
|
||||||
|
type: string
|
||||||
|
namespace:
|
||||||
|
description: |-
|
||||||
|
Namespace defines the namespace of the referenced TLSOption.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/providers/kubernetes-crd/#kind-tlsoption
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- name
|
||||||
|
type: object
|
||||||
|
secretName:
|
||||||
|
description: SecretName is the name of the referenced Kubernetes
|
||||||
|
Secret to specify the certificate details.
|
||||||
|
type: string
|
||||||
|
store:
|
||||||
|
description: |-
|
||||||
|
Store defines the reference to the TLSStore, that will be used to store certificates.
|
||||||
|
Please note that only `default` TLSStore can be used.
|
||||||
|
properties:
|
||||||
|
name:
|
||||||
|
description: |-
|
||||||
|
Name defines the name of the referenced TLSStore.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/providers/kubernetes-crd/#kind-tlsstore
|
||||||
|
type: string
|
||||||
|
namespace:
|
||||||
|
description: |-
|
||||||
|
Namespace defines the namespace of the referenced TLSStore.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/providers/kubernetes-crd/#kind-tlsstore
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- name
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- routes
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- metadata
|
||||||
|
- spec
|
||||||
|
type: object
|
||||||
|
served: true
|
||||||
|
storage: true
|
|
@ -0,0 +1,224 @@
|
||||||
|
---
|
||||||
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
|
kind: CustomResourceDefinition
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
controller-gen.kubebuilder.io/version: v0.14.0
|
||||||
|
name: ingressroutetcps.traefik.containo.us
|
||||||
|
spec:
|
||||||
|
group: traefik.containo.us
|
||||||
|
names:
|
||||||
|
kind: IngressRouteTCP
|
||||||
|
listKind: IngressRouteTCPList
|
||||||
|
plural: ingressroutetcps
|
||||||
|
singular: ingressroutetcp
|
||||||
|
scope: Namespaced
|
||||||
|
versions:
|
||||||
|
- name: v1alpha1
|
||||||
|
schema:
|
||||||
|
openAPIV3Schema:
|
||||||
|
description: IngressRouteTCP is the CRD implementation of a Traefik TCP Router.
|
||||||
|
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: IngressRouteTCPSpec defines the desired state of IngressRouteTCP.
|
||||||
|
properties:
|
||||||
|
entryPoints:
|
||||||
|
description: |-
|
||||||
|
EntryPoints defines the list of entry point names to bind to.
|
||||||
|
Entry points have to be configured in the static configuration.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/entrypoints/
|
||||||
|
Default: all.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
routes:
|
||||||
|
description: Routes defines the list of routes.
|
||||||
|
items:
|
||||||
|
description: RouteTCP holds the TCP route configuration.
|
||||||
|
properties:
|
||||||
|
match:
|
||||||
|
description: |-
|
||||||
|
Match defines the router's rule.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/routers/#rule_1
|
||||||
|
type: string
|
||||||
|
middlewares:
|
||||||
|
description: Middlewares defines the list of references to MiddlewareTCP
|
||||||
|
resources.
|
||||||
|
items:
|
||||||
|
description: ObjectReference is a generic reference to a Traefik
|
||||||
|
resource.
|
||||||
|
properties:
|
||||||
|
name:
|
||||||
|
description: Name defines the name of the referenced Traefik
|
||||||
|
resource.
|
||||||
|
type: string
|
||||||
|
namespace:
|
||||||
|
description: Namespace defines the namespace of the referenced
|
||||||
|
Traefik resource.
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- name
|
||||||
|
type: object
|
||||||
|
type: array
|
||||||
|
priority:
|
||||||
|
description: |-
|
||||||
|
Priority defines the router's priority.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/routers/#priority_1
|
||||||
|
type: integer
|
||||||
|
services:
|
||||||
|
description: Services defines the list of TCP services.
|
||||||
|
items:
|
||||||
|
description: ServiceTCP defines an upstream TCP service to
|
||||||
|
proxy traffic to.
|
||||||
|
properties:
|
||||||
|
name:
|
||||||
|
description: Name defines the name of the referenced Kubernetes
|
||||||
|
Service.
|
||||||
|
type: string
|
||||||
|
namespace:
|
||||||
|
description: Namespace defines the namespace of the referenced
|
||||||
|
Kubernetes Service.
|
||||||
|
type: string
|
||||||
|
nativeLB:
|
||||||
|
description: |-
|
||||||
|
NativeLB controls, when creating the load-balancer,
|
||||||
|
whether the LB's children are directly the pods IPs or if the only child is the Kubernetes Service clusterIP.
|
||||||
|
The Kubernetes Service itself does load-balance to the pods.
|
||||||
|
By default, NativeLB is false.
|
||||||
|
type: boolean
|
||||||
|
port:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Port defines the port of a Kubernetes Service.
|
||||||
|
This can be a reference to a named port.
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
proxyProtocol:
|
||||||
|
description: |-
|
||||||
|
ProxyProtocol defines the PROXY protocol configuration.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/services/#proxy-protocol
|
||||||
|
properties:
|
||||||
|
version:
|
||||||
|
description: Version defines the PROXY Protocol version
|
||||||
|
to use.
|
||||||
|
type: integer
|
||||||
|
type: object
|
||||||
|
terminationDelay:
|
||||||
|
description: |-
|
||||||
|
TerminationDelay defines the deadline that the proxy sets, after one of its connected peers indicates
|
||||||
|
it has closed the writing capability of its connection, to close the reading capability as well,
|
||||||
|
hence fully terminating the connection.
|
||||||
|
It is a duration in milliseconds, defaulting to 100.
|
||||||
|
A negative value means an infinite deadline (i.e. the reading capability is never closed).
|
||||||
|
type: integer
|
||||||
|
weight:
|
||||||
|
description: Weight defines the weight used when balancing
|
||||||
|
requests between multiple Kubernetes Service.
|
||||||
|
type: integer
|
||||||
|
required:
|
||||||
|
- name
|
||||||
|
- port
|
||||||
|
type: object
|
||||||
|
type: array
|
||||||
|
required:
|
||||||
|
- match
|
||||||
|
type: object
|
||||||
|
type: array
|
||||||
|
tls:
|
||||||
|
description: |-
|
||||||
|
TLS defines the TLS configuration on a layer 4 / TCP Route.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/routers/#tls_1
|
||||||
|
properties:
|
||||||
|
certResolver:
|
||||||
|
description: |-
|
||||||
|
CertResolver defines the name of the certificate resolver to use.
|
||||||
|
Cert resolvers have to be configured in the static configuration.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/https/acme/#certificate-resolvers
|
||||||
|
type: string
|
||||||
|
domains:
|
||||||
|
description: |-
|
||||||
|
Domains defines the list of domains that will be used to issue certificates.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/routers/#domains
|
||||||
|
items:
|
||||||
|
description: Domain holds a domain name with SANs.
|
||||||
|
properties:
|
||||||
|
main:
|
||||||
|
description: Main defines the main domain name.
|
||||||
|
type: string
|
||||||
|
sans:
|
||||||
|
description: SANs defines the subject alternative domain
|
||||||
|
names.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
type: object
|
||||||
|
type: array
|
||||||
|
options:
|
||||||
|
description: |-
|
||||||
|
Options defines the reference to a TLSOption, that specifies the parameters of the TLS connection.
|
||||||
|
If not defined, the `default` TLSOption is used.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/https/tls/#tls-options
|
||||||
|
properties:
|
||||||
|
name:
|
||||||
|
description: Name defines the name of the referenced Traefik
|
||||||
|
resource.
|
||||||
|
type: string
|
||||||
|
namespace:
|
||||||
|
description: Namespace defines the namespace of the referenced
|
||||||
|
Traefik resource.
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- name
|
||||||
|
type: object
|
||||||
|
passthrough:
|
||||||
|
description: Passthrough defines whether a TLS router will terminate
|
||||||
|
the TLS connection.
|
||||||
|
type: boolean
|
||||||
|
secretName:
|
||||||
|
description: SecretName is the name of the referenced Kubernetes
|
||||||
|
Secret to specify the certificate details.
|
||||||
|
type: string
|
||||||
|
store:
|
||||||
|
description: |-
|
||||||
|
Store defines the reference to the TLSStore, that will be used to store certificates.
|
||||||
|
Please note that only `default` TLSStore can be used.
|
||||||
|
properties:
|
||||||
|
name:
|
||||||
|
description: Name defines the name of the referenced Traefik
|
||||||
|
resource.
|
||||||
|
type: string
|
||||||
|
namespace:
|
||||||
|
description: Namespace defines the namespace of the referenced
|
||||||
|
Traefik resource.
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- name
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- routes
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- metadata
|
||||||
|
- spec
|
||||||
|
type: object
|
||||||
|
served: true
|
||||||
|
storage: true
|
|
@ -0,0 +1,104 @@
|
||||||
|
---
|
||||||
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
|
kind: CustomResourceDefinition
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
controller-gen.kubebuilder.io/version: v0.14.0
|
||||||
|
name: ingressrouteudps.traefik.containo.us
|
||||||
|
spec:
|
||||||
|
group: traefik.containo.us
|
||||||
|
names:
|
||||||
|
kind: IngressRouteUDP
|
||||||
|
listKind: IngressRouteUDPList
|
||||||
|
plural: ingressrouteudps
|
||||||
|
singular: ingressrouteudp
|
||||||
|
scope: Namespaced
|
||||||
|
versions:
|
||||||
|
- name: v1alpha1
|
||||||
|
schema:
|
||||||
|
openAPIV3Schema:
|
||||||
|
description: IngressRouteUDP is a CRD implementation of a Traefik UDP Router.
|
||||||
|
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: IngressRouteUDPSpec defines the desired state of a IngressRouteUDP.
|
||||||
|
properties:
|
||||||
|
entryPoints:
|
||||||
|
description: |-
|
||||||
|
EntryPoints defines the list of entry point names to bind to.
|
||||||
|
Entry points have to be configured in the static configuration.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/entrypoints/
|
||||||
|
Default: all.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
routes:
|
||||||
|
description: Routes defines the list of routes.
|
||||||
|
items:
|
||||||
|
description: RouteUDP holds the UDP route configuration.
|
||||||
|
properties:
|
||||||
|
services:
|
||||||
|
description: Services defines the list of UDP services.
|
||||||
|
items:
|
||||||
|
description: ServiceUDP defines an upstream UDP service to
|
||||||
|
proxy traffic to.
|
||||||
|
properties:
|
||||||
|
name:
|
||||||
|
description: Name defines the name of the referenced Kubernetes
|
||||||
|
Service.
|
||||||
|
type: string
|
||||||
|
namespace:
|
||||||
|
description: Namespace defines the namespace of the referenced
|
||||||
|
Kubernetes Service.
|
||||||
|
type: string
|
||||||
|
nativeLB:
|
||||||
|
description: |-
|
||||||
|
NativeLB controls, when creating the load-balancer,
|
||||||
|
whether the LB's children are directly the pods IPs or if the only child is the Kubernetes Service clusterIP.
|
||||||
|
The Kubernetes Service itself does load-balance to the pods.
|
||||||
|
By default, NativeLB is false.
|
||||||
|
type: boolean
|
||||||
|
port:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Port defines the port of a Kubernetes Service.
|
||||||
|
This can be a reference to a named port.
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
weight:
|
||||||
|
description: Weight defines the weight used when balancing
|
||||||
|
requests between multiple Kubernetes Service.
|
||||||
|
type: integer
|
||||||
|
required:
|
||||||
|
- name
|
||||||
|
- port
|
||||||
|
type: object
|
||||||
|
type: array
|
||||||
|
type: object
|
||||||
|
type: array
|
||||||
|
required:
|
||||||
|
- routes
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- metadata
|
||||||
|
- spec
|
||||||
|
type: object
|
||||||
|
served: true
|
||||||
|
storage: true
|
|
@ -0,0 +1,980 @@
|
||||||
|
---
|
||||||
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
|
kind: CustomResourceDefinition
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
controller-gen.kubebuilder.io/version: v0.14.0
|
||||||
|
name: middlewares.traefik.containo.us
|
||||||
|
spec:
|
||||||
|
group: traefik.containo.us
|
||||||
|
names:
|
||||||
|
kind: Middleware
|
||||||
|
listKind: MiddlewareList
|
||||||
|
plural: middlewares
|
||||||
|
singular: middleware
|
||||||
|
scope: Namespaced
|
||||||
|
versions:
|
||||||
|
- name: v1alpha1
|
||||||
|
schema:
|
||||||
|
openAPIV3Schema:
|
||||||
|
description: |-
|
||||||
|
Middleware is the CRD implementation of a Traefik Middleware.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/overview/
|
||||||
|
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: MiddlewareSpec defines the desired state of a Middleware.
|
||||||
|
properties:
|
||||||
|
addPrefix:
|
||||||
|
description: |-
|
||||||
|
AddPrefix holds the add prefix middleware configuration.
|
||||||
|
This middleware updates the path of a request before forwarding it.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/addprefix/
|
||||||
|
properties:
|
||||||
|
prefix:
|
||||||
|
description: |-
|
||||||
|
Prefix is the string to add before the current path in the requested URL.
|
||||||
|
It should include a leading slash (/).
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
basicAuth:
|
||||||
|
description: |-
|
||||||
|
BasicAuth holds the basic auth middleware configuration.
|
||||||
|
This middleware restricts access to your services to known users.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/basicauth/
|
||||||
|
properties:
|
||||||
|
headerField:
|
||||||
|
description: |-
|
||||||
|
HeaderField defines a header field to store the authenticated user.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/basicauth/#headerfield
|
||||||
|
type: string
|
||||||
|
realm:
|
||||||
|
description: |-
|
||||||
|
Realm allows the protected resources on a server to be partitioned into a set of protection spaces, each with its own authentication scheme.
|
||||||
|
Default: traefik.
|
||||||
|
type: string
|
||||||
|
removeHeader:
|
||||||
|
description: |-
|
||||||
|
RemoveHeader sets the removeHeader option to true to remove the authorization header before forwarding the request to your service.
|
||||||
|
Default: false.
|
||||||
|
type: boolean
|
||||||
|
secret:
|
||||||
|
description: Secret is the name of the referenced Kubernetes Secret
|
||||||
|
containing user credentials.
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
buffering:
|
||||||
|
description: |-
|
||||||
|
Buffering holds the buffering middleware configuration.
|
||||||
|
This middleware retries or limits the size of requests that can be forwarded to backends.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/buffering/#maxrequestbodybytes
|
||||||
|
properties:
|
||||||
|
maxRequestBodyBytes:
|
||||||
|
description: |-
|
||||||
|
MaxRequestBodyBytes defines the maximum allowed body size for the request (in bytes).
|
||||||
|
If the request exceeds the allowed size, it is not forwarded to the service, and the client gets a 413 (Request Entity Too Large) response.
|
||||||
|
Default: 0 (no maximum).
|
||||||
|
format: int64
|
||||||
|
type: integer
|
||||||
|
maxResponseBodyBytes:
|
||||||
|
description: |-
|
||||||
|
MaxResponseBodyBytes defines the maximum allowed response size from the service (in bytes).
|
||||||
|
If the response exceeds the allowed size, it is not forwarded to the client. The client gets a 500 (Internal Server Error) response instead.
|
||||||
|
Default: 0 (no maximum).
|
||||||
|
format: int64
|
||||||
|
type: integer
|
||||||
|
memRequestBodyBytes:
|
||||||
|
description: |-
|
||||||
|
MemRequestBodyBytes defines the threshold (in bytes) from which the request will be buffered on disk instead of in memory.
|
||||||
|
Default: 1048576 (1Mi).
|
||||||
|
format: int64
|
||||||
|
type: integer
|
||||||
|
memResponseBodyBytes:
|
||||||
|
description: |-
|
||||||
|
MemResponseBodyBytes defines the threshold (in bytes) from which the response will be buffered on disk instead of in memory.
|
||||||
|
Default: 1048576 (1Mi).
|
||||||
|
format: int64
|
||||||
|
type: integer
|
||||||
|
retryExpression:
|
||||||
|
description: |-
|
||||||
|
RetryExpression defines the retry conditions.
|
||||||
|
It is a logical combination of functions with operators AND (&&) and OR (||).
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/buffering/#retryexpression
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
chain:
|
||||||
|
description: |-
|
||||||
|
Chain holds the configuration of the chain middleware.
|
||||||
|
This middleware enables to define reusable combinations of other pieces of middleware.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/chain/
|
||||||
|
properties:
|
||||||
|
middlewares:
|
||||||
|
description: Middlewares is the list of MiddlewareRef which composes
|
||||||
|
the chain.
|
||||||
|
items:
|
||||||
|
description: MiddlewareRef is a reference to a Middleware resource.
|
||||||
|
properties:
|
||||||
|
name:
|
||||||
|
description: Name defines the name of the referenced Middleware
|
||||||
|
resource.
|
||||||
|
type: string
|
||||||
|
namespace:
|
||||||
|
description: Namespace defines the namespace of the referenced
|
||||||
|
Middleware resource.
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- name
|
||||||
|
type: object
|
||||||
|
type: array
|
||||||
|
type: object
|
||||||
|
circuitBreaker:
|
||||||
|
description: CircuitBreaker holds the circuit breaker configuration.
|
||||||
|
properties:
|
||||||
|
checkPeriod:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: CheckPeriod is the interval between successive checks
|
||||||
|
of the circuit breaker condition (when in standby state).
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
expression:
|
||||||
|
description: Expression is the condition that triggers the tripped
|
||||||
|
state.
|
||||||
|
type: string
|
||||||
|
fallbackDuration:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: FallbackDuration is the duration for which the circuit
|
||||||
|
breaker will wait before trying to recover (from a tripped state).
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
recoveryDuration:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: RecoveryDuration is the duration for which the circuit
|
||||||
|
breaker will try to recover (as soon as it is in recovering
|
||||||
|
state).
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
type: object
|
||||||
|
compress:
|
||||||
|
description: |-
|
||||||
|
Compress holds the compress middleware configuration.
|
||||||
|
This middleware compresses responses before sending them to the client, using gzip compression.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/compress/
|
||||||
|
properties:
|
||||||
|
excludedContentTypes:
|
||||||
|
description: ExcludedContentTypes defines the list of content
|
||||||
|
types to compare the Content-Type header of the incoming requests
|
||||||
|
and responses before compressing.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
minResponseBodyBytes:
|
||||||
|
description: |-
|
||||||
|
MinResponseBodyBytes defines the minimum amount of bytes a response body must have to be compressed.
|
||||||
|
Default: 1024.
|
||||||
|
type: integer
|
||||||
|
type: object
|
||||||
|
contentType:
|
||||||
|
description: |-
|
||||||
|
ContentType holds the content-type middleware configuration.
|
||||||
|
This middleware exists to enable the correct behavior until at least the default one can be changed in a future version.
|
||||||
|
properties:
|
||||||
|
autoDetect:
|
||||||
|
description: |-
|
||||||
|
AutoDetect specifies whether to let the `Content-Type` header, if it has not been set by the backend,
|
||||||
|
be automatically set to a value derived from the contents of the response.
|
||||||
|
As a proxy, the default behavior should be to leave the header alone, regardless of what the backend did with it.
|
||||||
|
However, the historic default was to always auto-detect and set the header if it was nil,
|
||||||
|
and it is going to be kept that way in order to support users currently relying on it.
|
||||||
|
type: boolean
|
||||||
|
type: object
|
||||||
|
digestAuth:
|
||||||
|
description: |-
|
||||||
|
DigestAuth holds the digest auth middleware configuration.
|
||||||
|
This middleware restricts access to your services to known users.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/digestauth/
|
||||||
|
properties:
|
||||||
|
headerField:
|
||||||
|
description: |-
|
||||||
|
HeaderField defines a header field to store the authenticated user.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/basicauth/#headerfield
|
||||||
|
type: string
|
||||||
|
realm:
|
||||||
|
description: |-
|
||||||
|
Realm allows the protected resources on a server to be partitioned into a set of protection spaces, each with its own authentication scheme.
|
||||||
|
Default: traefik.
|
||||||
|
type: string
|
||||||
|
removeHeader:
|
||||||
|
description: RemoveHeader defines whether to remove the authorization
|
||||||
|
header before forwarding the request to the backend.
|
||||||
|
type: boolean
|
||||||
|
secret:
|
||||||
|
description: Secret is the name of the referenced Kubernetes Secret
|
||||||
|
containing user credentials.
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
errors:
|
||||||
|
description: |-
|
||||||
|
ErrorPage holds the custom error middleware configuration.
|
||||||
|
This middleware returns a custom page in lieu of the default, according to configured ranges of HTTP Status codes.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/errorpages/
|
||||||
|
properties:
|
||||||
|
query:
|
||||||
|
description: |-
|
||||||
|
Query defines the URL for the error page (hosted by service).
|
||||||
|
The {status} variable can be used in order to insert the status code in the URL.
|
||||||
|
type: string
|
||||||
|
service:
|
||||||
|
description: |-
|
||||||
|
Service defines the reference to a Kubernetes Service that will serve the error page.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/errorpages/#service
|
||||||
|
properties:
|
||||||
|
kind:
|
||||||
|
description: Kind defines the kind of the Service.
|
||||||
|
enum:
|
||||||
|
- Service
|
||||||
|
- TraefikService
|
||||||
|
type: string
|
||||||
|
name:
|
||||||
|
description: |-
|
||||||
|
Name defines the name of the referenced Kubernetes Service or TraefikService.
|
||||||
|
The differentiation between the two is specified in the Kind field.
|
||||||
|
type: string
|
||||||
|
namespace:
|
||||||
|
description: Namespace defines the namespace of the referenced
|
||||||
|
Kubernetes Service or TraefikService.
|
||||||
|
type: string
|
||||||
|
nativeLB:
|
||||||
|
description: |-
|
||||||
|
NativeLB controls, when creating the load-balancer,
|
||||||
|
whether the LB's children are directly the pods IPs or if the only child is the Kubernetes Service clusterIP.
|
||||||
|
The Kubernetes Service itself does load-balance to the pods.
|
||||||
|
By default, NativeLB is false.
|
||||||
|
type: boolean
|
||||||
|
passHostHeader:
|
||||||
|
description: |-
|
||||||
|
PassHostHeader defines whether the client Host header is forwarded to the upstream Kubernetes Service.
|
||||||
|
By default, passHostHeader is true.
|
||||||
|
type: boolean
|
||||||
|
port:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Port defines the port of a Kubernetes Service.
|
||||||
|
This can be a reference to a named port.
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
responseForwarding:
|
||||||
|
description: ResponseForwarding defines how Traefik forwards
|
||||||
|
the response from the upstream Kubernetes Service to the
|
||||||
|
client.
|
||||||
|
properties:
|
||||||
|
flushInterval:
|
||||||
|
description: |-
|
||||||
|
FlushInterval defines the interval, in milliseconds, in between flushes to the client while copying the response body.
|
||||||
|
A negative value means to flush immediately after each write to the client.
|
||||||
|
This configuration is ignored when ReverseProxy recognizes a response as a streaming response;
|
||||||
|
for such responses, writes are flushed to the client immediately.
|
||||||
|
Default: 100ms
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
scheme:
|
||||||
|
description: |-
|
||||||
|
Scheme defines the scheme to use for the request to the upstream Kubernetes Service.
|
||||||
|
It defaults to https when Kubernetes Service port is 443, http otherwise.
|
||||||
|
type: string
|
||||||
|
serversTransport:
|
||||||
|
description: |-
|
||||||
|
ServersTransport defines the name of ServersTransport resource to use.
|
||||||
|
It allows to configure the transport between Traefik and your servers.
|
||||||
|
Can only be used on a Kubernetes Service.
|
||||||
|
type: string
|
||||||
|
sticky:
|
||||||
|
description: |-
|
||||||
|
Sticky defines the sticky sessions configuration.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/services/#sticky-sessions
|
||||||
|
properties:
|
||||||
|
cookie:
|
||||||
|
description: Cookie defines the sticky cookie configuration.
|
||||||
|
properties:
|
||||||
|
httpOnly:
|
||||||
|
description: HTTPOnly defines whether the cookie can
|
||||||
|
be accessed by client-side APIs, such as JavaScript.
|
||||||
|
type: boolean
|
||||||
|
name:
|
||||||
|
description: Name defines the Cookie name.
|
||||||
|
type: string
|
||||||
|
sameSite:
|
||||||
|
description: |-
|
||||||
|
SameSite defines the same site policy.
|
||||||
|
More info: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite
|
||||||
|
type: string
|
||||||
|
secure:
|
||||||
|
description: Secure defines whether the cookie can
|
||||||
|
only be transmitted over an encrypted connection
|
||||||
|
(i.e. HTTPS).
|
||||||
|
type: boolean
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
strategy:
|
||||||
|
description: |-
|
||||||
|
Strategy defines the load balancing strategy between the servers.
|
||||||
|
RoundRobin is the only supported value at the moment.
|
||||||
|
type: string
|
||||||
|
weight:
|
||||||
|
description: |-
|
||||||
|
Weight defines the weight and should only be specified when Name references a TraefikService object
|
||||||
|
(and to be precise, one that embeds a Weighted Round Robin).
|
||||||
|
type: integer
|
||||||
|
required:
|
||||||
|
- name
|
||||||
|
type: object
|
||||||
|
status:
|
||||||
|
description: |-
|
||||||
|
Status defines which status or range of statuses should result in an error page.
|
||||||
|
It can be either a status code as a number (500),
|
||||||
|
as multiple comma-separated numbers (500,502),
|
||||||
|
as ranges by separating two codes with a dash (500-599),
|
||||||
|
or a combination of the two (404,418,500-599).
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
type: object
|
||||||
|
forwardAuth:
|
||||||
|
description: |-
|
||||||
|
ForwardAuth holds the forward auth middleware configuration.
|
||||||
|
This middleware delegates the request authentication to a Service.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/forwardauth/
|
||||||
|
properties:
|
||||||
|
address:
|
||||||
|
description: Address defines the authentication server address.
|
||||||
|
type: string
|
||||||
|
authRequestHeaders:
|
||||||
|
description: |-
|
||||||
|
AuthRequestHeaders defines the list of the headers to copy from the request to the authentication server.
|
||||||
|
If not set or empty then all request headers are passed.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
authResponseHeaders:
|
||||||
|
description: AuthResponseHeaders defines the list of headers to
|
||||||
|
copy from the authentication server response and set on forwarded
|
||||||
|
request, replacing any existing conflicting headers.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
authResponseHeadersRegex:
|
||||||
|
description: |-
|
||||||
|
AuthResponseHeadersRegex defines the regex to match headers to copy from the authentication server response and set on forwarded request, after stripping all headers that match the regex.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/forwardauth/#authresponseheadersregex
|
||||||
|
type: string
|
||||||
|
tls:
|
||||||
|
description: TLS defines the configuration used to secure the
|
||||||
|
connection to the authentication server.
|
||||||
|
properties:
|
||||||
|
caOptional:
|
||||||
|
type: boolean
|
||||||
|
caSecret:
|
||||||
|
description: |-
|
||||||
|
CASecret is the name of the referenced Kubernetes Secret containing the CA to validate the server certificate.
|
||||||
|
The CA certificate is extracted from key `tls.ca` or `ca.crt`.
|
||||||
|
type: string
|
||||||
|
certSecret:
|
||||||
|
description: |-
|
||||||
|
CertSecret is the name of the referenced Kubernetes Secret containing the client certificate.
|
||||||
|
The client certificate is extracted from the keys `tls.crt` and `tls.key`.
|
||||||
|
type: string
|
||||||
|
insecureSkipVerify:
|
||||||
|
description: InsecureSkipVerify defines whether the server
|
||||||
|
certificates should be validated.
|
||||||
|
type: boolean
|
||||||
|
type: object
|
||||||
|
trustForwardHeader:
|
||||||
|
description: 'TrustForwardHeader defines whether to trust (ie:
|
||||||
|
forward) all X-Forwarded-* headers.'
|
||||||
|
type: boolean
|
||||||
|
type: object
|
||||||
|
headers:
|
||||||
|
description: |-
|
||||||
|
Headers holds the headers middleware configuration.
|
||||||
|
This middleware manages the requests and responses headers.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/headers/#customrequestheaders
|
||||||
|
properties:
|
||||||
|
accessControlAllowCredentials:
|
||||||
|
description: AccessControlAllowCredentials defines whether the
|
||||||
|
request can include user credentials.
|
||||||
|
type: boolean
|
||||||
|
accessControlAllowHeaders:
|
||||||
|
description: AccessControlAllowHeaders defines the Access-Control-Request-Headers
|
||||||
|
values sent in preflight response.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
accessControlAllowMethods:
|
||||||
|
description: AccessControlAllowMethods defines the Access-Control-Request-Method
|
||||||
|
values sent in preflight response.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
accessControlAllowOriginList:
|
||||||
|
description: AccessControlAllowOriginList is a list of allowable
|
||||||
|
origins. Can also be a wildcard origin "*".
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
accessControlAllowOriginListRegex:
|
||||||
|
description: AccessControlAllowOriginListRegex is a list of allowable
|
||||||
|
origins written following the Regular Expression syntax (https://golang.org/pkg/regexp/).
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
accessControlExposeHeaders:
|
||||||
|
description: AccessControlExposeHeaders defines the Access-Control-Expose-Headers
|
||||||
|
values sent in preflight response.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
accessControlMaxAge:
|
||||||
|
description: AccessControlMaxAge defines the time that a preflight
|
||||||
|
request may be cached.
|
||||||
|
format: int64
|
||||||
|
type: integer
|
||||||
|
addVaryHeader:
|
||||||
|
description: AddVaryHeader defines whether the Vary header is
|
||||||
|
automatically added/updated when the AccessControlAllowOriginList
|
||||||
|
is set.
|
||||||
|
type: boolean
|
||||||
|
allowedHosts:
|
||||||
|
description: AllowedHosts defines the fully qualified list of
|
||||||
|
allowed domain names.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
browserXssFilter:
|
||||||
|
description: BrowserXSSFilter defines whether to add the X-XSS-Protection
|
||||||
|
header with the value 1; mode=block.
|
||||||
|
type: boolean
|
||||||
|
contentSecurityPolicy:
|
||||||
|
description: ContentSecurityPolicy defines the Content-Security-Policy
|
||||||
|
header value.
|
||||||
|
type: string
|
||||||
|
contentTypeNosniff:
|
||||||
|
description: ContentTypeNosniff defines whether to add the X-Content-Type-Options
|
||||||
|
header with the nosniff value.
|
||||||
|
type: boolean
|
||||||
|
customBrowserXSSValue:
|
||||||
|
description: |-
|
||||||
|
CustomBrowserXSSValue defines the X-XSS-Protection header value.
|
||||||
|
This overrides the BrowserXssFilter option.
|
||||||
|
type: string
|
||||||
|
customFrameOptionsValue:
|
||||||
|
description: |-
|
||||||
|
CustomFrameOptionsValue defines the X-Frame-Options header value.
|
||||||
|
This overrides the FrameDeny option.
|
||||||
|
type: string
|
||||||
|
customRequestHeaders:
|
||||||
|
additionalProperties:
|
||||||
|
type: string
|
||||||
|
description: CustomRequestHeaders defines the header names and
|
||||||
|
values to apply to the request.
|
||||||
|
type: object
|
||||||
|
customResponseHeaders:
|
||||||
|
additionalProperties:
|
||||||
|
type: string
|
||||||
|
description: CustomResponseHeaders defines the header names and
|
||||||
|
values to apply to the response.
|
||||||
|
type: object
|
||||||
|
featurePolicy:
|
||||||
|
description: 'Deprecated: use PermissionsPolicy instead.'
|
||||||
|
type: string
|
||||||
|
forceSTSHeader:
|
||||||
|
description: ForceSTSHeader defines whether to add the STS header
|
||||||
|
even when the connection is HTTP.
|
||||||
|
type: boolean
|
||||||
|
frameDeny:
|
||||||
|
description: FrameDeny defines whether to add the X-Frame-Options
|
||||||
|
header with the DENY value.
|
||||||
|
type: boolean
|
||||||
|
hostsProxyHeaders:
|
||||||
|
description: HostsProxyHeaders defines the header keys that may
|
||||||
|
hold a proxied hostname value for the request.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
isDevelopment:
|
||||||
|
description: |-
|
||||||
|
IsDevelopment defines whether to mitigate the unwanted effects of the AllowedHosts, SSL, and STS options when developing.
|
||||||
|
Usually testing takes place using HTTP, not HTTPS, and on localhost, not your production domain.
|
||||||
|
If you would like your development environment to mimic production with complete Host blocking, SSL redirects,
|
||||||
|
and STS headers, leave this as false.
|
||||||
|
type: boolean
|
||||||
|
permissionsPolicy:
|
||||||
|
description: |-
|
||||||
|
PermissionsPolicy defines the Permissions-Policy header value.
|
||||||
|
This allows sites to control browser features.
|
||||||
|
type: string
|
||||||
|
publicKey:
|
||||||
|
description: PublicKey is the public key that implements HPKP
|
||||||
|
to prevent MITM attacks with forged certificates.
|
||||||
|
type: string
|
||||||
|
referrerPolicy:
|
||||||
|
description: |-
|
||||||
|
ReferrerPolicy defines the Referrer-Policy header value.
|
||||||
|
This allows sites to control whether browsers forward the Referer header to other sites.
|
||||||
|
type: string
|
||||||
|
sslForceHost:
|
||||||
|
description: 'Deprecated: use RedirectRegex instead.'
|
||||||
|
type: boolean
|
||||||
|
sslHost:
|
||||||
|
description: 'Deprecated: use RedirectRegex instead.'
|
||||||
|
type: string
|
||||||
|
sslProxyHeaders:
|
||||||
|
additionalProperties:
|
||||||
|
type: string
|
||||||
|
description: |-
|
||||||
|
SSLProxyHeaders defines the header keys with associated values that would indicate a valid HTTPS request.
|
||||||
|
It can be useful when using other proxies (example: "X-Forwarded-Proto": "https").
|
||||||
|
type: object
|
||||||
|
sslRedirect:
|
||||||
|
description: 'Deprecated: use EntryPoint redirection or RedirectScheme
|
||||||
|
instead.'
|
||||||
|
type: boolean
|
||||||
|
sslTemporaryRedirect:
|
||||||
|
description: 'Deprecated: use EntryPoint redirection or RedirectScheme
|
||||||
|
instead.'
|
||||||
|
type: boolean
|
||||||
|
stsIncludeSubdomains:
|
||||||
|
description: STSIncludeSubdomains defines whether the includeSubDomains
|
||||||
|
directive is appended to the Strict-Transport-Security header.
|
||||||
|
type: boolean
|
||||||
|
stsPreload:
|
||||||
|
description: STSPreload defines whether the preload flag is appended
|
||||||
|
to the Strict-Transport-Security header.
|
||||||
|
type: boolean
|
||||||
|
stsSeconds:
|
||||||
|
description: |-
|
||||||
|
STSSeconds defines the max-age of the Strict-Transport-Security header.
|
||||||
|
If set to 0, the header is not set.
|
||||||
|
format: int64
|
||||||
|
type: integer
|
||||||
|
type: object
|
||||||
|
inFlightReq:
|
||||||
|
description: |-
|
||||||
|
InFlightReq holds the in-flight request middleware configuration.
|
||||||
|
This middleware limits the number of requests being processed and served concurrently.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/inflightreq/
|
||||||
|
properties:
|
||||||
|
amount:
|
||||||
|
description: |-
|
||||||
|
Amount defines the maximum amount of allowed simultaneous in-flight request.
|
||||||
|
The middleware responds with HTTP 429 Too Many Requests if there are already amount requests in progress (based on the same sourceCriterion strategy).
|
||||||
|
format: int64
|
||||||
|
type: integer
|
||||||
|
sourceCriterion:
|
||||||
|
description: |-
|
||||||
|
SourceCriterion defines what criterion is used to group requests as originating from a common source.
|
||||||
|
If several strategies are defined at the same time, an error will be raised.
|
||||||
|
If none are set, the default is to use the requestHost.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/inflightreq/#sourcecriterion
|
||||||
|
properties:
|
||||||
|
ipStrategy:
|
||||||
|
description: |-
|
||||||
|
IPStrategy holds the IP strategy configuration used by Traefik to determine the client IP.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/ipallowlist/#ipstrategy
|
||||||
|
properties:
|
||||||
|
depth:
|
||||||
|
description: Depth tells Traefik to use the X-Forwarded-For
|
||||||
|
header and take the IP located at the depth position
|
||||||
|
(starting from the right).
|
||||||
|
type: integer
|
||||||
|
excludedIPs:
|
||||||
|
description: ExcludedIPs configures Traefik to scan the
|
||||||
|
X-Forwarded-For header and select the first IP not in
|
||||||
|
the list.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
type: object
|
||||||
|
requestHeaderName:
|
||||||
|
description: RequestHeaderName defines the name of the header
|
||||||
|
used to group incoming requests.
|
||||||
|
type: string
|
||||||
|
requestHost:
|
||||||
|
description: RequestHost defines whether to consider the request
|
||||||
|
Host as the source.
|
||||||
|
type: boolean
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
ipAllowList:
|
||||||
|
description: |-
|
||||||
|
IPAllowList holds the IP allowlist middleware configuration.
|
||||||
|
This middleware accepts / refuses requests based on the client IP.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/ipallowlist/
|
||||||
|
properties:
|
||||||
|
ipStrategy:
|
||||||
|
description: |-
|
||||||
|
IPStrategy holds the IP strategy configuration used by Traefik to determine the client IP.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/ipallowlist/#ipstrategy
|
||||||
|
properties:
|
||||||
|
depth:
|
||||||
|
description: Depth tells Traefik to use the X-Forwarded-For
|
||||||
|
header and take the IP located at the depth position (starting
|
||||||
|
from the right).
|
||||||
|
type: integer
|
||||||
|
excludedIPs:
|
||||||
|
description: ExcludedIPs configures Traefik to scan the X-Forwarded-For
|
||||||
|
header and select the first IP not in the list.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
type: object
|
||||||
|
sourceRange:
|
||||||
|
description: SourceRange defines the set of allowed IPs (or ranges
|
||||||
|
of allowed IPs by using CIDR notation).
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
type: object
|
||||||
|
ipWhiteList:
|
||||||
|
description: |-
|
||||||
|
IPWhiteList holds the IP whitelist middleware configuration.
|
||||||
|
This middleware accepts / refuses requests based on the client IP.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/ipwhitelist/
|
||||||
|
Deprecated: please use IPAllowList instead.
|
||||||
|
properties:
|
||||||
|
ipStrategy:
|
||||||
|
description: |-
|
||||||
|
IPStrategy holds the IP strategy configuration used by Traefik to determine the client IP.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/ipallowlist/#ipstrategy
|
||||||
|
properties:
|
||||||
|
depth:
|
||||||
|
description: Depth tells Traefik to use the X-Forwarded-For
|
||||||
|
header and take the IP located at the depth position (starting
|
||||||
|
from the right).
|
||||||
|
type: integer
|
||||||
|
excludedIPs:
|
||||||
|
description: ExcludedIPs configures Traefik to scan the X-Forwarded-For
|
||||||
|
header and select the first IP not in the list.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
type: object
|
||||||
|
sourceRange:
|
||||||
|
description: SourceRange defines the set of allowed IPs (or ranges
|
||||||
|
of allowed IPs by using CIDR notation).
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
type: object
|
||||||
|
passTLSClientCert:
|
||||||
|
description: |-
|
||||||
|
PassTLSClientCert holds the pass TLS client cert middleware configuration.
|
||||||
|
This middleware adds the selected data from the passed client TLS certificate to a header.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/passtlsclientcert/
|
||||||
|
properties:
|
||||||
|
info:
|
||||||
|
description: Info selects the specific client certificate details
|
||||||
|
you want to add to the X-Forwarded-Tls-Client-Cert-Info header.
|
||||||
|
properties:
|
||||||
|
issuer:
|
||||||
|
description: Issuer defines the client certificate issuer
|
||||||
|
details to add to the X-Forwarded-Tls-Client-Cert-Info header.
|
||||||
|
properties:
|
||||||
|
commonName:
|
||||||
|
description: CommonName defines whether to add the organizationalUnit
|
||||||
|
information into the issuer.
|
||||||
|
type: boolean
|
||||||
|
country:
|
||||||
|
description: Country defines whether to add the country
|
||||||
|
information into the issuer.
|
||||||
|
type: boolean
|
||||||
|
domainComponent:
|
||||||
|
description: DomainComponent defines whether to add the
|
||||||
|
domainComponent information into the issuer.
|
||||||
|
type: boolean
|
||||||
|
locality:
|
||||||
|
description: Locality defines whether to add the locality
|
||||||
|
information into the issuer.
|
||||||
|
type: boolean
|
||||||
|
organization:
|
||||||
|
description: Organization defines whether to add the organization
|
||||||
|
information into the issuer.
|
||||||
|
type: boolean
|
||||||
|
province:
|
||||||
|
description: Province defines whether to add the province
|
||||||
|
information into the issuer.
|
||||||
|
type: boolean
|
||||||
|
serialNumber:
|
||||||
|
description: SerialNumber defines whether to add the serialNumber
|
||||||
|
information into the issuer.
|
||||||
|
type: boolean
|
||||||
|
type: object
|
||||||
|
notAfter:
|
||||||
|
description: NotAfter defines whether to add the Not After
|
||||||
|
information from the Validity part.
|
||||||
|
type: boolean
|
||||||
|
notBefore:
|
||||||
|
description: NotBefore defines whether to add the Not Before
|
||||||
|
information from the Validity part.
|
||||||
|
type: boolean
|
||||||
|
sans:
|
||||||
|
description: Sans defines whether to add the Subject Alternative
|
||||||
|
Name information from the Subject Alternative Name part.
|
||||||
|
type: boolean
|
||||||
|
serialNumber:
|
||||||
|
description: SerialNumber defines whether to add the client
|
||||||
|
serialNumber information.
|
||||||
|
type: boolean
|
||||||
|
subject:
|
||||||
|
description: Subject defines the client certificate subject
|
||||||
|
details to add to the X-Forwarded-Tls-Client-Cert-Info header.
|
||||||
|
properties:
|
||||||
|
commonName:
|
||||||
|
description: CommonName defines whether to add the organizationalUnit
|
||||||
|
information into the subject.
|
||||||
|
type: boolean
|
||||||
|
country:
|
||||||
|
description: Country defines whether to add the country
|
||||||
|
information into the subject.
|
||||||
|
type: boolean
|
||||||
|
domainComponent:
|
||||||
|
description: DomainComponent defines whether to add the
|
||||||
|
domainComponent information into the subject.
|
||||||
|
type: boolean
|
||||||
|
locality:
|
||||||
|
description: Locality defines whether to add the locality
|
||||||
|
information into the subject.
|
||||||
|
type: boolean
|
||||||
|
organization:
|
||||||
|
description: Organization defines whether to add the organization
|
||||||
|
information into the subject.
|
||||||
|
type: boolean
|
||||||
|
organizationalUnit:
|
||||||
|
description: OrganizationalUnit defines whether to add
|
||||||
|
the organizationalUnit information into the subject.
|
||||||
|
type: boolean
|
||||||
|
province:
|
||||||
|
description: Province defines whether to add the province
|
||||||
|
information into the subject.
|
||||||
|
type: boolean
|
||||||
|
serialNumber:
|
||||||
|
description: SerialNumber defines whether to add the serialNumber
|
||||||
|
information into the subject.
|
||||||
|
type: boolean
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
pem:
|
||||||
|
description: PEM sets the X-Forwarded-Tls-Client-Cert header with
|
||||||
|
the certificate.
|
||||||
|
type: boolean
|
||||||
|
type: object
|
||||||
|
plugin:
|
||||||
|
additionalProperties:
|
||||||
|
x-kubernetes-preserve-unknown-fields: true
|
||||||
|
description: |-
|
||||||
|
Plugin defines the middleware plugin configuration.
|
||||||
|
More info: https://doc.traefik.io/traefik/plugins/
|
||||||
|
type: object
|
||||||
|
rateLimit:
|
||||||
|
description: |-
|
||||||
|
RateLimit holds the rate limit configuration.
|
||||||
|
This middleware ensures that services will receive a fair amount of requests, and allows one to define what fair is.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/ratelimit/
|
||||||
|
properties:
|
||||||
|
average:
|
||||||
|
description: |-
|
||||||
|
Average is the maximum rate, by default in requests/s, allowed for the given source.
|
||||||
|
It defaults to 0, which means no rate limiting.
|
||||||
|
The rate is actually defined by dividing Average by Period. So for a rate below 1req/s,
|
||||||
|
one needs to define a Period larger than a second.
|
||||||
|
format: int64
|
||||||
|
type: integer
|
||||||
|
burst:
|
||||||
|
description: |-
|
||||||
|
Burst is the maximum number of requests allowed to arrive in the same arbitrarily small period of time.
|
||||||
|
It defaults to 1.
|
||||||
|
format: int64
|
||||||
|
type: integer
|
||||||
|
period:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Period, in combination with Average, defines the actual maximum rate, such as:
|
||||||
|
r = Average / Period. It defaults to a second.
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
sourceCriterion:
|
||||||
|
description: |-
|
||||||
|
SourceCriterion defines what criterion is used to group requests as originating from a common source.
|
||||||
|
If several strategies are defined at the same time, an error will be raised.
|
||||||
|
If none are set, the default is to use the request's remote address field (as an ipStrategy).
|
||||||
|
properties:
|
||||||
|
ipStrategy:
|
||||||
|
description: |-
|
||||||
|
IPStrategy holds the IP strategy configuration used by Traefik to determine the client IP.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/ipallowlist/#ipstrategy
|
||||||
|
properties:
|
||||||
|
depth:
|
||||||
|
description: Depth tells Traefik to use the X-Forwarded-For
|
||||||
|
header and take the IP located at the depth position
|
||||||
|
(starting from the right).
|
||||||
|
type: integer
|
||||||
|
excludedIPs:
|
||||||
|
description: ExcludedIPs configures Traefik to scan the
|
||||||
|
X-Forwarded-For header and select the first IP not in
|
||||||
|
the list.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
type: object
|
||||||
|
requestHeaderName:
|
||||||
|
description: RequestHeaderName defines the name of the header
|
||||||
|
used to group incoming requests.
|
||||||
|
type: string
|
||||||
|
requestHost:
|
||||||
|
description: RequestHost defines whether to consider the request
|
||||||
|
Host as the source.
|
||||||
|
type: boolean
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
redirectRegex:
|
||||||
|
description: |-
|
||||||
|
RedirectRegex holds the redirect regex middleware configuration.
|
||||||
|
This middleware redirects a request using regex matching and replacement.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/redirectregex/#regex
|
||||||
|
properties:
|
||||||
|
permanent:
|
||||||
|
description: Permanent defines whether the redirection is permanent
|
||||||
|
(301).
|
||||||
|
type: boolean
|
||||||
|
regex:
|
||||||
|
description: Regex defines the regex used to match and capture
|
||||||
|
elements from the request URL.
|
||||||
|
type: string
|
||||||
|
replacement:
|
||||||
|
description: Replacement defines how to modify the URL to have
|
||||||
|
the new target URL.
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
redirectScheme:
|
||||||
|
description: |-
|
||||||
|
RedirectScheme holds the redirect scheme middleware configuration.
|
||||||
|
This middleware redirects requests from a scheme/port to another.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/redirectscheme/
|
||||||
|
properties:
|
||||||
|
permanent:
|
||||||
|
description: Permanent defines whether the redirection is permanent
|
||||||
|
(301).
|
||||||
|
type: boolean
|
||||||
|
port:
|
||||||
|
description: Port defines the port of the new URL.
|
||||||
|
type: string
|
||||||
|
scheme:
|
||||||
|
description: Scheme defines the scheme of the new URL.
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
replacePath:
|
||||||
|
description: |-
|
||||||
|
ReplacePath holds the replace path middleware configuration.
|
||||||
|
This middleware replaces the path of the request URL and store the original path in an X-Replaced-Path header.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/replacepath/
|
||||||
|
properties:
|
||||||
|
path:
|
||||||
|
description: Path defines the path to use as replacement in the
|
||||||
|
request URL.
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
replacePathRegex:
|
||||||
|
description: |-
|
||||||
|
ReplacePathRegex holds the replace path regex middleware configuration.
|
||||||
|
This middleware replaces the path of a URL using regex matching and replacement.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/replacepathregex/
|
||||||
|
properties:
|
||||||
|
regex:
|
||||||
|
description: Regex defines the regular expression used to match
|
||||||
|
and capture the path from the request URL.
|
||||||
|
type: string
|
||||||
|
replacement:
|
||||||
|
description: Replacement defines the replacement path format,
|
||||||
|
which can include captured variables.
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
retry:
|
||||||
|
description: |-
|
||||||
|
Retry holds the retry middleware configuration.
|
||||||
|
This middleware reissues requests a given number of times to a backend server if that server does not reply.
|
||||||
|
As soon as the server answers, the middleware stops retrying, regardless of the response status.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/retry/
|
||||||
|
properties:
|
||||||
|
attempts:
|
||||||
|
description: Attempts defines how many times the request should
|
||||||
|
be retried.
|
||||||
|
type: integer
|
||||||
|
initialInterval:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
InitialInterval defines the first wait time in the exponential backoff series.
|
||||||
|
The maximum interval is calculated as twice the initialInterval.
|
||||||
|
If unspecified, requests will be retried immediately.
|
||||||
|
The value of initialInterval should be provided in seconds or as a valid duration format,
|
||||||
|
see https://pkg.go.dev/time#ParseDuration.
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
type: object
|
||||||
|
stripPrefix:
|
||||||
|
description: |-
|
||||||
|
StripPrefix holds the strip prefix middleware configuration.
|
||||||
|
This middleware removes the specified prefixes from the URL path.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/stripprefix/
|
||||||
|
properties:
|
||||||
|
forceSlash:
|
||||||
|
description: |-
|
||||||
|
ForceSlash ensures that the resulting stripped path is not the empty string, by replacing it with / when necessary.
|
||||||
|
Default: true.
|
||||||
|
type: boolean
|
||||||
|
prefixes:
|
||||||
|
description: Prefixes defines the prefixes to strip from the request
|
||||||
|
URL.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
type: object
|
||||||
|
stripPrefixRegex:
|
||||||
|
description: |-
|
||||||
|
StripPrefixRegex holds the strip prefix regex middleware configuration.
|
||||||
|
This middleware removes the matching prefixes from the URL path.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/stripprefixregex/
|
||||||
|
properties:
|
||||||
|
regex:
|
||||||
|
description: Regex defines the regular expression to match the
|
||||||
|
path prefix from the request URL.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- metadata
|
||||||
|
- spec
|
||||||
|
type: object
|
||||||
|
served: true
|
||||||
|
storage: true
|
|
@ -0,0 +1,87 @@
|
||||||
|
---
|
||||||
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
|
kind: CustomResourceDefinition
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
controller-gen.kubebuilder.io/version: v0.14.0
|
||||||
|
name: middlewaretcps.traefik.containo.us
|
||||||
|
spec:
|
||||||
|
group: traefik.containo.us
|
||||||
|
names:
|
||||||
|
kind: MiddlewareTCP
|
||||||
|
listKind: MiddlewareTCPList
|
||||||
|
plural: middlewaretcps
|
||||||
|
singular: middlewaretcp
|
||||||
|
scope: Namespaced
|
||||||
|
versions:
|
||||||
|
- name: v1alpha1
|
||||||
|
schema:
|
||||||
|
openAPIV3Schema:
|
||||||
|
description: |-
|
||||||
|
MiddlewareTCP is the CRD implementation of a Traefik TCP middleware.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/overview/
|
||||||
|
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: MiddlewareTCPSpec defines the desired state of a MiddlewareTCP.
|
||||||
|
properties:
|
||||||
|
inFlightConn:
|
||||||
|
description: InFlightConn defines the InFlightConn middleware configuration.
|
||||||
|
properties:
|
||||||
|
amount:
|
||||||
|
description: |-
|
||||||
|
Amount defines the maximum amount of allowed simultaneous connections.
|
||||||
|
The middleware closes the connection if there are already amount connections opened.
|
||||||
|
format: int64
|
||||||
|
type: integer
|
||||||
|
type: object
|
||||||
|
ipAllowList:
|
||||||
|
description: |-
|
||||||
|
IPAllowList defines the IPAllowList middleware configuration.
|
||||||
|
This middleware accepts/refuses connections based on the client IP.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/tcp/ipallowlist/
|
||||||
|
properties:
|
||||||
|
sourceRange:
|
||||||
|
description: SourceRange defines the allowed IPs (or ranges of
|
||||||
|
allowed IPs by using CIDR notation).
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
type: object
|
||||||
|
ipWhiteList:
|
||||||
|
description: |-
|
||||||
|
IPWhiteList defines the IPWhiteList middleware configuration.
|
||||||
|
This middleware accepts/refuses connections based on the client IP.
|
||||||
|
Deprecated: please use IPAllowList instead.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/tcp/ipwhitelist/
|
||||||
|
properties:
|
||||||
|
sourceRange:
|
||||||
|
description: SourceRange defines the allowed IPs (or ranges of
|
||||||
|
allowed IPs by using CIDR notation).
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- metadata
|
||||||
|
- spec
|
||||||
|
type: object
|
||||||
|
served: true
|
||||||
|
storage: true
|
|
@ -0,0 +1,126 @@
|
||||||
|
---
|
||||||
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
|
kind: CustomResourceDefinition
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
controller-gen.kubebuilder.io/version: v0.14.0
|
||||||
|
name: serverstransports.traefik.containo.us
|
||||||
|
spec:
|
||||||
|
group: traefik.containo.us
|
||||||
|
names:
|
||||||
|
kind: ServersTransport
|
||||||
|
listKind: ServersTransportList
|
||||||
|
plural: serverstransports
|
||||||
|
singular: serverstransport
|
||||||
|
scope: Namespaced
|
||||||
|
versions:
|
||||||
|
- name: v1alpha1
|
||||||
|
schema:
|
||||||
|
openAPIV3Schema:
|
||||||
|
description: |-
|
||||||
|
ServersTransport is the CRD implementation of a ServersTransport.
|
||||||
|
If no serversTransport is specified, the default@internal will be used.
|
||||||
|
The default@internal serversTransport is created from the static configuration.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/services/#serverstransport_1
|
||||||
|
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: ServersTransportSpec defines the desired state of a ServersTransport.
|
||||||
|
properties:
|
||||||
|
certificatesSecrets:
|
||||||
|
description: CertificatesSecrets defines a list of secret storing
|
||||||
|
client certificates for mTLS.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
disableHTTP2:
|
||||||
|
description: DisableHTTP2 disables HTTP/2 for connections with backend
|
||||||
|
servers.
|
||||||
|
type: boolean
|
||||||
|
forwardingTimeouts:
|
||||||
|
description: ForwardingTimeouts defines the timeouts for requests
|
||||||
|
forwarded to the backend servers.
|
||||||
|
properties:
|
||||||
|
dialTimeout:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: DialTimeout is the amount of time to wait until a
|
||||||
|
connection to a backend server can be established.
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
idleConnTimeout:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: IdleConnTimeout is the maximum period for which an
|
||||||
|
idle HTTP keep-alive connection will remain open before closing
|
||||||
|
itself.
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
pingTimeout:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: PingTimeout is the timeout after which the HTTP/2
|
||||||
|
connection will be closed if a response to ping is not received.
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
readIdleTimeout:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: ReadIdleTimeout is the timeout after which a health
|
||||||
|
check using ping frame will be carried out if no frame is received
|
||||||
|
on the HTTP/2 connection.
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
responseHeaderTimeout:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: ResponseHeaderTimeout is the amount of time to wait
|
||||||
|
for a server's response headers after fully writing the request
|
||||||
|
(including its body, if any).
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
type: object
|
||||||
|
insecureSkipVerify:
|
||||||
|
description: InsecureSkipVerify disables SSL certificate verification.
|
||||||
|
type: boolean
|
||||||
|
maxIdleConnsPerHost:
|
||||||
|
description: MaxIdleConnsPerHost controls the maximum idle (keep-alive)
|
||||||
|
to keep per-host.
|
||||||
|
type: integer
|
||||||
|
peerCertURI:
|
||||||
|
description: PeerCertURI defines the peer cert URI used to match against
|
||||||
|
SAN URI during the peer certificate verification.
|
||||||
|
type: string
|
||||||
|
rootCAsSecrets:
|
||||||
|
description: RootCAsSecrets defines a list of CA secret used to validate
|
||||||
|
self-signed certificate.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
serverName:
|
||||||
|
description: ServerName defines the server name used to contact the
|
||||||
|
server.
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- metadata
|
||||||
|
- spec
|
||||||
|
type: object
|
||||||
|
served: true
|
||||||
|
storage: true
|
|
@ -0,0 +1,114 @@
|
||||||
|
---
|
||||||
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
|
kind: CustomResourceDefinition
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
controller-gen.kubebuilder.io/version: v0.14.0
|
||||||
|
name: tlsoptions.traefik.containo.us
|
||||||
|
spec:
|
||||||
|
group: traefik.containo.us
|
||||||
|
names:
|
||||||
|
kind: TLSOption
|
||||||
|
listKind: TLSOptionList
|
||||||
|
plural: tlsoptions
|
||||||
|
singular: tlsoption
|
||||||
|
scope: Namespaced
|
||||||
|
versions:
|
||||||
|
- name: v1alpha1
|
||||||
|
schema:
|
||||||
|
openAPIV3Schema:
|
||||||
|
description: |-
|
||||||
|
TLSOption is the CRD implementation of a Traefik TLS Option, allowing to configure some parameters of the TLS connection.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/https/tls/#tls-options
|
||||||
|
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: TLSOptionSpec defines the desired state of a TLSOption.
|
||||||
|
properties:
|
||||||
|
alpnProtocols:
|
||||||
|
description: |-
|
||||||
|
ALPNProtocols defines the list of supported application level protocols for the TLS handshake, in order of preference.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/https/tls/#alpn-protocols
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
cipherSuites:
|
||||||
|
description: |-
|
||||||
|
CipherSuites defines the list of supported cipher suites for TLS versions up to TLS 1.2.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/https/tls/#cipher-suites
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
clientAuth:
|
||||||
|
description: ClientAuth defines the server's policy for TLS Client
|
||||||
|
Authentication.
|
||||||
|
properties:
|
||||||
|
clientAuthType:
|
||||||
|
description: ClientAuthType defines the client authentication
|
||||||
|
type to apply.
|
||||||
|
enum:
|
||||||
|
- NoClientCert
|
||||||
|
- RequestClientCert
|
||||||
|
- RequireAnyClientCert
|
||||||
|
- VerifyClientCertIfGiven
|
||||||
|
- RequireAndVerifyClientCert
|
||||||
|
type: string
|
||||||
|
secretNames:
|
||||||
|
description: SecretNames defines the names of the referenced Kubernetes
|
||||||
|
Secret storing certificate details.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
type: object
|
||||||
|
curvePreferences:
|
||||||
|
description: |-
|
||||||
|
CurvePreferences defines the preferred elliptic curves in a specific order.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/https/tls/#curve-preferences
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
maxVersion:
|
||||||
|
description: |-
|
||||||
|
MaxVersion defines the maximum TLS version that Traefik will accept.
|
||||||
|
Possible values: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13.
|
||||||
|
Default: None.
|
||||||
|
type: string
|
||||||
|
minVersion:
|
||||||
|
description: |-
|
||||||
|
MinVersion defines the minimum TLS version that Traefik will accept.
|
||||||
|
Possible values: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13.
|
||||||
|
Default: VersionTLS10.
|
||||||
|
type: string
|
||||||
|
preferServerCipherSuites:
|
||||||
|
description: |-
|
||||||
|
PreferServerCipherSuites defines whether the server chooses a cipher suite among his own instead of among the client's.
|
||||||
|
It is enabled automatically when minVersion or maxVersion is set.
|
||||||
|
Deprecated: https://github.com/golang/go/issues/45430
|
||||||
|
type: boolean
|
||||||
|
sniStrict:
|
||||||
|
description: SniStrict defines whether Traefik allows connections
|
||||||
|
from clients connections that do not specify a server_name extension.
|
||||||
|
type: boolean
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- metadata
|
||||||
|
- spec
|
||||||
|
type: object
|
||||||
|
served: true
|
||||||
|
storage: true
|
|
@ -0,0 +1,97 @@
|
||||||
|
---
|
||||||
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
|
kind: CustomResourceDefinition
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
controller-gen.kubebuilder.io/version: v0.14.0
|
||||||
|
name: tlsstores.traefik.containo.us
|
||||||
|
spec:
|
||||||
|
group: traefik.containo.us
|
||||||
|
names:
|
||||||
|
kind: TLSStore
|
||||||
|
listKind: TLSStoreList
|
||||||
|
plural: tlsstores
|
||||||
|
singular: tlsstore
|
||||||
|
scope: Namespaced
|
||||||
|
versions:
|
||||||
|
- name: v1alpha1
|
||||||
|
schema:
|
||||||
|
openAPIV3Schema:
|
||||||
|
description: |-
|
||||||
|
TLSStore is the CRD implementation of a Traefik TLS Store.
|
||||||
|
For the time being, only the TLSStore named default is supported.
|
||||||
|
This means that you cannot have two stores that are named default in different Kubernetes namespaces.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/https/tls/#certificates-stores
|
||||||
|
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: TLSStoreSpec defines the desired state of a TLSStore.
|
||||||
|
properties:
|
||||||
|
certificates:
|
||||||
|
description: Certificates is a list of secret names, each secret holding
|
||||||
|
a key/certificate pair to add to the store.
|
||||||
|
items:
|
||||||
|
description: Certificate holds a secret name for the TLSStore resource.
|
||||||
|
properties:
|
||||||
|
secretName:
|
||||||
|
description: SecretName is the name of the referenced Kubernetes
|
||||||
|
Secret to specify the certificate details.
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- secretName
|
||||||
|
type: object
|
||||||
|
type: array
|
||||||
|
defaultCertificate:
|
||||||
|
description: DefaultCertificate defines the default certificate configuration.
|
||||||
|
properties:
|
||||||
|
secretName:
|
||||||
|
description: SecretName is the name of the referenced Kubernetes
|
||||||
|
Secret to specify the certificate details.
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- secretName
|
||||||
|
type: object
|
||||||
|
defaultGeneratedCert:
|
||||||
|
description: DefaultGeneratedCert defines the default generated certificate
|
||||||
|
configuration.
|
||||||
|
properties:
|
||||||
|
domain:
|
||||||
|
description: Domain is the domain definition for the DefaultCertificate.
|
||||||
|
properties:
|
||||||
|
main:
|
||||||
|
description: Main defines the main domain name.
|
||||||
|
type: string
|
||||||
|
sans:
|
||||||
|
description: SANs defines the subject alternative domain names.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
type: object
|
||||||
|
resolver:
|
||||||
|
description: Resolver is the name of the resolver that will be
|
||||||
|
used to issue the DefaultCertificate.
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- metadata
|
||||||
|
- spec
|
||||||
|
type: object
|
||||||
|
served: true
|
||||||
|
storage: true
|
|
@ -0,0 +1,411 @@
|
||||||
|
---
|
||||||
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
|
kind: CustomResourceDefinition
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
controller-gen.kubebuilder.io/version: v0.14.0
|
||||||
|
name: traefikservices.traefik.containo.us
|
||||||
|
spec:
|
||||||
|
group: traefik.containo.us
|
||||||
|
names:
|
||||||
|
kind: TraefikService
|
||||||
|
listKind: TraefikServiceList
|
||||||
|
plural: traefikservices
|
||||||
|
singular: traefikservice
|
||||||
|
scope: Namespaced
|
||||||
|
versions:
|
||||||
|
- name: v1alpha1
|
||||||
|
schema:
|
||||||
|
openAPIV3Schema:
|
||||||
|
description: |-
|
||||||
|
TraefikService is the CRD implementation of a Traefik Service.
|
||||||
|
TraefikService object allows to:
|
||||||
|
- Apply weight to Services on load-balancing
|
||||||
|
- Mirror traffic on services
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/providers/kubernetes-crd/#kind-traefikservice
|
||||||
|
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: TraefikServiceSpec defines the desired state of a TraefikService.
|
||||||
|
properties:
|
||||||
|
mirroring:
|
||||||
|
description: Mirroring defines the Mirroring service configuration.
|
||||||
|
properties:
|
||||||
|
kind:
|
||||||
|
description: Kind defines the kind of the Service.
|
||||||
|
enum:
|
||||||
|
- Service
|
||||||
|
- TraefikService
|
||||||
|
type: string
|
||||||
|
maxBodySize:
|
||||||
|
description: |-
|
||||||
|
MaxBodySize defines the maximum size allowed for the body of the request.
|
||||||
|
If the body is larger, the request is not mirrored.
|
||||||
|
Default value is -1, which means unlimited size.
|
||||||
|
format: int64
|
||||||
|
type: integer
|
||||||
|
mirrors:
|
||||||
|
description: Mirrors defines the list of mirrors where Traefik
|
||||||
|
will duplicate the traffic.
|
||||||
|
items:
|
||||||
|
description: MirrorService holds the mirror configuration.
|
||||||
|
properties:
|
||||||
|
kind:
|
||||||
|
description: Kind defines the kind of the Service.
|
||||||
|
enum:
|
||||||
|
- Service
|
||||||
|
- TraefikService
|
||||||
|
type: string
|
||||||
|
name:
|
||||||
|
description: |-
|
||||||
|
Name defines the name of the referenced Kubernetes Service or TraefikService.
|
||||||
|
The differentiation between the two is specified in the Kind field.
|
||||||
|
type: string
|
||||||
|
namespace:
|
||||||
|
description: Namespace defines the namespace of the referenced
|
||||||
|
Kubernetes Service or TraefikService.
|
||||||
|
type: string
|
||||||
|
nativeLB:
|
||||||
|
description: |-
|
||||||
|
NativeLB controls, when creating the load-balancer,
|
||||||
|
whether the LB's children are directly the pods IPs or if the only child is the Kubernetes Service clusterIP.
|
||||||
|
The Kubernetes Service itself does load-balance to the pods.
|
||||||
|
By default, NativeLB is false.
|
||||||
|
type: boolean
|
||||||
|
passHostHeader:
|
||||||
|
description: |-
|
||||||
|
PassHostHeader defines whether the client Host header is forwarded to the upstream Kubernetes Service.
|
||||||
|
By default, passHostHeader is true.
|
||||||
|
type: boolean
|
||||||
|
percent:
|
||||||
|
description: |-
|
||||||
|
Percent defines the part of the traffic to mirror.
|
||||||
|
Supported values: 0 to 100.
|
||||||
|
type: integer
|
||||||
|
port:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Port defines the port of a Kubernetes Service.
|
||||||
|
This can be a reference to a named port.
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
responseForwarding:
|
||||||
|
description: ResponseForwarding defines how Traefik forwards
|
||||||
|
the response from the upstream Kubernetes Service to the
|
||||||
|
client.
|
||||||
|
properties:
|
||||||
|
flushInterval:
|
||||||
|
description: |-
|
||||||
|
FlushInterval defines the interval, in milliseconds, in between flushes to the client while copying the response body.
|
||||||
|
A negative value means to flush immediately after each write to the client.
|
||||||
|
This configuration is ignored when ReverseProxy recognizes a response as a streaming response;
|
||||||
|
for such responses, writes are flushed to the client immediately.
|
||||||
|
Default: 100ms
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
scheme:
|
||||||
|
description: |-
|
||||||
|
Scheme defines the scheme to use for the request to the upstream Kubernetes Service.
|
||||||
|
It defaults to https when Kubernetes Service port is 443, http otherwise.
|
||||||
|
type: string
|
||||||
|
serversTransport:
|
||||||
|
description: |-
|
||||||
|
ServersTransport defines the name of ServersTransport resource to use.
|
||||||
|
It allows to configure the transport between Traefik and your servers.
|
||||||
|
Can only be used on a Kubernetes Service.
|
||||||
|
type: string
|
||||||
|
sticky:
|
||||||
|
description: |-
|
||||||
|
Sticky defines the sticky sessions configuration.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/services/#sticky-sessions
|
||||||
|
properties:
|
||||||
|
cookie:
|
||||||
|
description: Cookie defines the sticky cookie configuration.
|
||||||
|
properties:
|
||||||
|
httpOnly:
|
||||||
|
description: HTTPOnly defines whether the cookie
|
||||||
|
can be accessed by client-side APIs, such as JavaScript.
|
||||||
|
type: boolean
|
||||||
|
name:
|
||||||
|
description: Name defines the Cookie name.
|
||||||
|
type: string
|
||||||
|
sameSite:
|
||||||
|
description: |-
|
||||||
|
SameSite defines the same site policy.
|
||||||
|
More info: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite
|
||||||
|
type: string
|
||||||
|
secure:
|
||||||
|
description: Secure defines whether the cookie can
|
||||||
|
only be transmitted over an encrypted connection
|
||||||
|
(i.e. HTTPS).
|
||||||
|
type: boolean
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
strategy:
|
||||||
|
description: |-
|
||||||
|
Strategy defines the load balancing strategy between the servers.
|
||||||
|
RoundRobin is the only supported value at the moment.
|
||||||
|
type: string
|
||||||
|
weight:
|
||||||
|
description: |-
|
||||||
|
Weight defines the weight and should only be specified when Name references a TraefikService object
|
||||||
|
(and to be precise, one that embeds a Weighted Round Robin).
|
||||||
|
type: integer
|
||||||
|
required:
|
||||||
|
- name
|
||||||
|
type: object
|
||||||
|
type: array
|
||||||
|
name:
|
||||||
|
description: |-
|
||||||
|
Name defines the name of the referenced Kubernetes Service or TraefikService.
|
||||||
|
The differentiation between the two is specified in the Kind field.
|
||||||
|
type: string
|
||||||
|
namespace:
|
||||||
|
description: Namespace defines the namespace of the referenced
|
||||||
|
Kubernetes Service or TraefikService.
|
||||||
|
type: string
|
||||||
|
nativeLB:
|
||||||
|
description: |-
|
||||||
|
NativeLB controls, when creating the load-balancer,
|
||||||
|
whether the LB's children are directly the pods IPs or if the only child is the Kubernetes Service clusterIP.
|
||||||
|
The Kubernetes Service itself does load-balance to the pods.
|
||||||
|
By default, NativeLB is false.
|
||||||
|
type: boolean
|
||||||
|
passHostHeader:
|
||||||
|
description: |-
|
||||||
|
PassHostHeader defines whether the client Host header is forwarded to the upstream Kubernetes Service.
|
||||||
|
By default, passHostHeader is true.
|
||||||
|
type: boolean
|
||||||
|
port:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Port defines the port of a Kubernetes Service.
|
||||||
|
This can be a reference to a named port.
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
responseForwarding:
|
||||||
|
description: ResponseForwarding defines how Traefik forwards the
|
||||||
|
response from the upstream Kubernetes Service to the client.
|
||||||
|
properties:
|
||||||
|
flushInterval:
|
||||||
|
description: |-
|
||||||
|
FlushInterval defines the interval, in milliseconds, in between flushes to the client while copying the response body.
|
||||||
|
A negative value means to flush immediately after each write to the client.
|
||||||
|
This configuration is ignored when ReverseProxy recognizes a response as a streaming response;
|
||||||
|
for such responses, writes are flushed to the client immediately.
|
||||||
|
Default: 100ms
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
scheme:
|
||||||
|
description: |-
|
||||||
|
Scheme defines the scheme to use for the request to the upstream Kubernetes Service.
|
||||||
|
It defaults to https when Kubernetes Service port is 443, http otherwise.
|
||||||
|
type: string
|
||||||
|
serversTransport:
|
||||||
|
description: |-
|
||||||
|
ServersTransport defines the name of ServersTransport resource to use.
|
||||||
|
It allows to configure the transport between Traefik and your servers.
|
||||||
|
Can only be used on a Kubernetes Service.
|
||||||
|
type: string
|
||||||
|
sticky:
|
||||||
|
description: |-
|
||||||
|
Sticky defines the sticky sessions configuration.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/services/#sticky-sessions
|
||||||
|
properties:
|
||||||
|
cookie:
|
||||||
|
description: Cookie defines the sticky cookie configuration.
|
||||||
|
properties:
|
||||||
|
httpOnly:
|
||||||
|
description: HTTPOnly defines whether the cookie can be
|
||||||
|
accessed by client-side APIs, such as JavaScript.
|
||||||
|
type: boolean
|
||||||
|
name:
|
||||||
|
description: Name defines the Cookie name.
|
||||||
|
type: string
|
||||||
|
sameSite:
|
||||||
|
description: |-
|
||||||
|
SameSite defines the same site policy.
|
||||||
|
More info: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite
|
||||||
|
type: string
|
||||||
|
secure:
|
||||||
|
description: Secure defines whether the cookie can only
|
||||||
|
be transmitted over an encrypted connection (i.e. HTTPS).
|
||||||
|
type: boolean
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
strategy:
|
||||||
|
description: |-
|
||||||
|
Strategy defines the load balancing strategy between the servers.
|
||||||
|
RoundRobin is the only supported value at the moment.
|
||||||
|
type: string
|
||||||
|
weight:
|
||||||
|
description: |-
|
||||||
|
Weight defines the weight and should only be specified when Name references a TraefikService object
|
||||||
|
(and to be precise, one that embeds a Weighted Round Robin).
|
||||||
|
type: integer
|
||||||
|
required:
|
||||||
|
- name
|
||||||
|
type: object
|
||||||
|
weighted:
|
||||||
|
description: Weighted defines the Weighted Round Robin configuration.
|
||||||
|
properties:
|
||||||
|
services:
|
||||||
|
description: Services defines the list of Kubernetes Service and/or
|
||||||
|
TraefikService to load-balance, with weight.
|
||||||
|
items:
|
||||||
|
description: Service defines an upstream HTTP service to proxy
|
||||||
|
traffic to.
|
||||||
|
properties:
|
||||||
|
kind:
|
||||||
|
description: Kind defines the kind of the Service.
|
||||||
|
enum:
|
||||||
|
- Service
|
||||||
|
- TraefikService
|
||||||
|
type: string
|
||||||
|
name:
|
||||||
|
description: |-
|
||||||
|
Name defines the name of the referenced Kubernetes Service or TraefikService.
|
||||||
|
The differentiation between the two is specified in the Kind field.
|
||||||
|
type: string
|
||||||
|
namespace:
|
||||||
|
description: Namespace defines the namespace of the referenced
|
||||||
|
Kubernetes Service or TraefikService.
|
||||||
|
type: string
|
||||||
|
nativeLB:
|
||||||
|
description: |-
|
||||||
|
NativeLB controls, when creating the load-balancer,
|
||||||
|
whether the LB's children are directly the pods IPs or if the only child is the Kubernetes Service clusterIP.
|
||||||
|
The Kubernetes Service itself does load-balance to the pods.
|
||||||
|
By default, NativeLB is false.
|
||||||
|
type: boolean
|
||||||
|
passHostHeader:
|
||||||
|
description: |-
|
||||||
|
PassHostHeader defines whether the client Host header is forwarded to the upstream Kubernetes Service.
|
||||||
|
By default, passHostHeader is true.
|
||||||
|
type: boolean
|
||||||
|
port:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Port defines the port of a Kubernetes Service.
|
||||||
|
This can be a reference to a named port.
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
responseForwarding:
|
||||||
|
description: ResponseForwarding defines how Traefik forwards
|
||||||
|
the response from the upstream Kubernetes Service to the
|
||||||
|
client.
|
||||||
|
properties:
|
||||||
|
flushInterval:
|
||||||
|
description: |-
|
||||||
|
FlushInterval defines the interval, in milliseconds, in between flushes to the client while copying the response body.
|
||||||
|
A negative value means to flush immediately after each write to the client.
|
||||||
|
This configuration is ignored when ReverseProxy recognizes a response as a streaming response;
|
||||||
|
for such responses, writes are flushed to the client immediately.
|
||||||
|
Default: 100ms
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
scheme:
|
||||||
|
description: |-
|
||||||
|
Scheme defines the scheme to use for the request to the upstream Kubernetes Service.
|
||||||
|
It defaults to https when Kubernetes Service port is 443, http otherwise.
|
||||||
|
type: string
|
||||||
|
serversTransport:
|
||||||
|
description: |-
|
||||||
|
ServersTransport defines the name of ServersTransport resource to use.
|
||||||
|
It allows to configure the transport between Traefik and your servers.
|
||||||
|
Can only be used on a Kubernetes Service.
|
||||||
|
type: string
|
||||||
|
sticky:
|
||||||
|
description: |-
|
||||||
|
Sticky defines the sticky sessions configuration.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/services/#sticky-sessions
|
||||||
|
properties:
|
||||||
|
cookie:
|
||||||
|
description: Cookie defines the sticky cookie configuration.
|
||||||
|
properties:
|
||||||
|
httpOnly:
|
||||||
|
description: HTTPOnly defines whether the cookie
|
||||||
|
can be accessed by client-side APIs, such as JavaScript.
|
||||||
|
type: boolean
|
||||||
|
name:
|
||||||
|
description: Name defines the Cookie name.
|
||||||
|
type: string
|
||||||
|
sameSite:
|
||||||
|
description: |-
|
||||||
|
SameSite defines the same site policy.
|
||||||
|
More info: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite
|
||||||
|
type: string
|
||||||
|
secure:
|
||||||
|
description: Secure defines whether the cookie can
|
||||||
|
only be transmitted over an encrypted connection
|
||||||
|
(i.e. HTTPS).
|
||||||
|
type: boolean
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
strategy:
|
||||||
|
description: |-
|
||||||
|
Strategy defines the load balancing strategy between the servers.
|
||||||
|
RoundRobin is the only supported value at the moment.
|
||||||
|
type: string
|
||||||
|
weight:
|
||||||
|
description: |-
|
||||||
|
Weight defines the weight and should only be specified when Name references a TraefikService object
|
||||||
|
(and to be precise, one that embeds a Weighted Round Robin).
|
||||||
|
type: integer
|
||||||
|
required:
|
||||||
|
- name
|
||||||
|
type: object
|
||||||
|
type: array
|
||||||
|
sticky:
|
||||||
|
description: |-
|
||||||
|
Sticky defines whether sticky sessions are enabled.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/providers/kubernetes-crd/#stickiness-and-load-balancing
|
||||||
|
properties:
|
||||||
|
cookie:
|
||||||
|
description: Cookie defines the sticky cookie configuration.
|
||||||
|
properties:
|
||||||
|
httpOnly:
|
||||||
|
description: HTTPOnly defines whether the cookie can be
|
||||||
|
accessed by client-side APIs, such as JavaScript.
|
||||||
|
type: boolean
|
||||||
|
name:
|
||||||
|
description: Name defines the Cookie name.
|
||||||
|
type: string
|
||||||
|
sameSite:
|
||||||
|
description: |-
|
||||||
|
SameSite defines the same site policy.
|
||||||
|
More info: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite
|
||||||
|
type: string
|
||||||
|
secure:
|
||||||
|
description: Secure defines whether the cookie can only
|
||||||
|
be transmitted over an encrypted connection (i.e. HTTPS).
|
||||||
|
type: boolean
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- metadata
|
||||||
|
- spec
|
||||||
|
type: object
|
||||||
|
served: true
|
||||||
|
storage: true
|
287
traefik/base/charts/traefik/crds/traefik.io_ingressroutes.yaml
Normal file
287
traefik/base/charts/traefik/crds/traefik.io_ingressroutes.yaml
Normal file
|
@ -0,0 +1,287 @@
|
||||||
|
---
|
||||||
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
|
kind: CustomResourceDefinition
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
controller-gen.kubebuilder.io/version: v0.14.0
|
||||||
|
name: ingressroutes.traefik.io
|
||||||
|
spec:
|
||||||
|
group: traefik.io
|
||||||
|
names:
|
||||||
|
kind: IngressRoute
|
||||||
|
listKind: IngressRouteList
|
||||||
|
plural: ingressroutes
|
||||||
|
singular: ingressroute
|
||||||
|
scope: Namespaced
|
||||||
|
versions:
|
||||||
|
- name: v1alpha1
|
||||||
|
schema:
|
||||||
|
openAPIV3Schema:
|
||||||
|
description: IngressRoute is the CRD implementation of a Traefik HTTP Router.
|
||||||
|
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: IngressRouteSpec defines the desired state of IngressRoute.
|
||||||
|
properties:
|
||||||
|
entryPoints:
|
||||||
|
description: |-
|
||||||
|
EntryPoints defines the list of entry point names to bind to.
|
||||||
|
Entry points have to be configured in the static configuration.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/entrypoints/
|
||||||
|
Default: all.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
routes:
|
||||||
|
description: Routes defines the list of routes.
|
||||||
|
items:
|
||||||
|
description: Route holds the HTTP route configuration.
|
||||||
|
properties:
|
||||||
|
kind:
|
||||||
|
description: |-
|
||||||
|
Kind defines the kind of the route.
|
||||||
|
Rule is the only supported kind.
|
||||||
|
enum:
|
||||||
|
- Rule
|
||||||
|
type: string
|
||||||
|
match:
|
||||||
|
description: |-
|
||||||
|
Match defines the router's rule.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/routers/#rule
|
||||||
|
type: string
|
||||||
|
middlewares:
|
||||||
|
description: |-
|
||||||
|
Middlewares defines the list of references to Middleware resources.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/providers/kubernetes-crd/#kind-middleware
|
||||||
|
items:
|
||||||
|
description: MiddlewareRef is a reference to a Middleware
|
||||||
|
resource.
|
||||||
|
properties:
|
||||||
|
name:
|
||||||
|
description: Name defines the name of the referenced Middleware
|
||||||
|
resource.
|
||||||
|
type: string
|
||||||
|
namespace:
|
||||||
|
description: Namespace defines the namespace of the referenced
|
||||||
|
Middleware resource.
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- name
|
||||||
|
type: object
|
||||||
|
type: array
|
||||||
|
priority:
|
||||||
|
description: |-
|
||||||
|
Priority defines the router's priority.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/routers/#priority
|
||||||
|
type: integer
|
||||||
|
services:
|
||||||
|
description: |-
|
||||||
|
Services defines the list of Service.
|
||||||
|
It can contain any combination of TraefikService and/or reference to a Kubernetes Service.
|
||||||
|
items:
|
||||||
|
description: Service defines an upstream HTTP service to proxy
|
||||||
|
traffic to.
|
||||||
|
properties:
|
||||||
|
kind:
|
||||||
|
description: Kind defines the kind of the Service.
|
||||||
|
enum:
|
||||||
|
- Service
|
||||||
|
- TraefikService
|
||||||
|
type: string
|
||||||
|
name:
|
||||||
|
description: |-
|
||||||
|
Name defines the name of the referenced Kubernetes Service or TraefikService.
|
||||||
|
The differentiation between the two is specified in the Kind field.
|
||||||
|
type: string
|
||||||
|
namespace:
|
||||||
|
description: Namespace defines the namespace of the referenced
|
||||||
|
Kubernetes Service or TraefikService.
|
||||||
|
type: string
|
||||||
|
nativeLB:
|
||||||
|
description: |-
|
||||||
|
NativeLB controls, when creating the load-balancer,
|
||||||
|
whether the LB's children are directly the pods IPs or if the only child is the Kubernetes Service clusterIP.
|
||||||
|
The Kubernetes Service itself does load-balance to the pods.
|
||||||
|
By default, NativeLB is false.
|
||||||
|
type: boolean
|
||||||
|
passHostHeader:
|
||||||
|
description: |-
|
||||||
|
PassHostHeader defines whether the client Host header is forwarded to the upstream Kubernetes Service.
|
||||||
|
By default, passHostHeader is true.
|
||||||
|
type: boolean
|
||||||
|
port:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Port defines the port of a Kubernetes Service.
|
||||||
|
This can be a reference to a named port.
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
responseForwarding:
|
||||||
|
description: ResponseForwarding defines how Traefik forwards
|
||||||
|
the response from the upstream Kubernetes Service to
|
||||||
|
the client.
|
||||||
|
properties:
|
||||||
|
flushInterval:
|
||||||
|
description: |-
|
||||||
|
FlushInterval defines the interval, in milliseconds, in between flushes to the client while copying the response body.
|
||||||
|
A negative value means to flush immediately after each write to the client.
|
||||||
|
This configuration is ignored when ReverseProxy recognizes a response as a streaming response;
|
||||||
|
for such responses, writes are flushed to the client immediately.
|
||||||
|
Default: 100ms
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
scheme:
|
||||||
|
description: |-
|
||||||
|
Scheme defines the scheme to use for the request to the upstream Kubernetes Service.
|
||||||
|
It defaults to https when Kubernetes Service port is 443, http otherwise.
|
||||||
|
type: string
|
||||||
|
serversTransport:
|
||||||
|
description: |-
|
||||||
|
ServersTransport defines the name of ServersTransport resource to use.
|
||||||
|
It allows to configure the transport between Traefik and your servers.
|
||||||
|
Can only be used on a Kubernetes Service.
|
||||||
|
type: string
|
||||||
|
sticky:
|
||||||
|
description: |-
|
||||||
|
Sticky defines the sticky sessions configuration.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/services/#sticky-sessions
|
||||||
|
properties:
|
||||||
|
cookie:
|
||||||
|
description: Cookie defines the sticky cookie configuration.
|
||||||
|
properties:
|
||||||
|
httpOnly:
|
||||||
|
description: HTTPOnly defines whether the cookie
|
||||||
|
can be accessed by client-side APIs, such as
|
||||||
|
JavaScript.
|
||||||
|
type: boolean
|
||||||
|
name:
|
||||||
|
description: Name defines the Cookie name.
|
||||||
|
type: string
|
||||||
|
sameSite:
|
||||||
|
description: |-
|
||||||
|
SameSite defines the same site policy.
|
||||||
|
More info: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite
|
||||||
|
type: string
|
||||||
|
secure:
|
||||||
|
description: Secure defines whether the cookie
|
||||||
|
can only be transmitted over an encrypted connection
|
||||||
|
(i.e. HTTPS).
|
||||||
|
type: boolean
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
strategy:
|
||||||
|
description: |-
|
||||||
|
Strategy defines the load balancing strategy between the servers.
|
||||||
|
RoundRobin is the only supported value at the moment.
|
||||||
|
type: string
|
||||||
|
weight:
|
||||||
|
description: |-
|
||||||
|
Weight defines the weight and should only be specified when Name references a TraefikService object
|
||||||
|
(and to be precise, one that embeds a Weighted Round Robin).
|
||||||
|
type: integer
|
||||||
|
required:
|
||||||
|
- name
|
||||||
|
type: object
|
||||||
|
type: array
|
||||||
|
required:
|
||||||
|
- kind
|
||||||
|
- match
|
||||||
|
type: object
|
||||||
|
type: array
|
||||||
|
tls:
|
||||||
|
description: |-
|
||||||
|
TLS defines the TLS configuration.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/routers/#tls
|
||||||
|
properties:
|
||||||
|
certResolver:
|
||||||
|
description: |-
|
||||||
|
CertResolver defines the name of the certificate resolver to use.
|
||||||
|
Cert resolvers have to be configured in the static configuration.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/https/acme/#certificate-resolvers
|
||||||
|
type: string
|
||||||
|
domains:
|
||||||
|
description: |-
|
||||||
|
Domains defines the list of domains that will be used to issue certificates.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/routers/#domains
|
||||||
|
items:
|
||||||
|
description: Domain holds a domain name with SANs.
|
||||||
|
properties:
|
||||||
|
main:
|
||||||
|
description: Main defines the main domain name.
|
||||||
|
type: string
|
||||||
|
sans:
|
||||||
|
description: SANs defines the subject alternative domain
|
||||||
|
names.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
type: object
|
||||||
|
type: array
|
||||||
|
options:
|
||||||
|
description: |-
|
||||||
|
Options defines the reference to a TLSOption, that specifies the parameters of the TLS connection.
|
||||||
|
If not defined, the `default` TLSOption is used.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/https/tls/#tls-options
|
||||||
|
properties:
|
||||||
|
name:
|
||||||
|
description: |-
|
||||||
|
Name defines the name of the referenced TLSOption.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/providers/kubernetes-crd/#kind-tlsoption
|
||||||
|
type: string
|
||||||
|
namespace:
|
||||||
|
description: |-
|
||||||
|
Namespace defines the namespace of the referenced TLSOption.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/providers/kubernetes-crd/#kind-tlsoption
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- name
|
||||||
|
type: object
|
||||||
|
secretName:
|
||||||
|
description: SecretName is the name of the referenced Kubernetes
|
||||||
|
Secret to specify the certificate details.
|
||||||
|
type: string
|
||||||
|
store:
|
||||||
|
description: |-
|
||||||
|
Store defines the reference to the TLSStore, that will be used to store certificates.
|
||||||
|
Please note that only `default` TLSStore can be used.
|
||||||
|
properties:
|
||||||
|
name:
|
||||||
|
description: |-
|
||||||
|
Name defines the name of the referenced TLSStore.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/providers/kubernetes-crd/#kind-tlsstore
|
||||||
|
type: string
|
||||||
|
namespace:
|
||||||
|
description: |-
|
||||||
|
Namespace defines the namespace of the referenced TLSStore.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/providers/kubernetes-crd/#kind-tlsstore
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- name
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- routes
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- metadata
|
||||||
|
- spec
|
||||||
|
type: object
|
||||||
|
served: true
|
||||||
|
storage: true
|
|
@ -0,0 +1,224 @@
|
||||||
|
---
|
||||||
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
|
kind: CustomResourceDefinition
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
controller-gen.kubebuilder.io/version: v0.14.0
|
||||||
|
name: ingressroutetcps.traefik.io
|
||||||
|
spec:
|
||||||
|
group: traefik.io
|
||||||
|
names:
|
||||||
|
kind: IngressRouteTCP
|
||||||
|
listKind: IngressRouteTCPList
|
||||||
|
plural: ingressroutetcps
|
||||||
|
singular: ingressroutetcp
|
||||||
|
scope: Namespaced
|
||||||
|
versions:
|
||||||
|
- name: v1alpha1
|
||||||
|
schema:
|
||||||
|
openAPIV3Schema:
|
||||||
|
description: IngressRouteTCP is the CRD implementation of a Traefik TCP Router.
|
||||||
|
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: IngressRouteTCPSpec defines the desired state of IngressRouteTCP.
|
||||||
|
properties:
|
||||||
|
entryPoints:
|
||||||
|
description: |-
|
||||||
|
EntryPoints defines the list of entry point names to bind to.
|
||||||
|
Entry points have to be configured in the static configuration.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/entrypoints/
|
||||||
|
Default: all.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
routes:
|
||||||
|
description: Routes defines the list of routes.
|
||||||
|
items:
|
||||||
|
description: RouteTCP holds the TCP route configuration.
|
||||||
|
properties:
|
||||||
|
match:
|
||||||
|
description: |-
|
||||||
|
Match defines the router's rule.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/routers/#rule_1
|
||||||
|
type: string
|
||||||
|
middlewares:
|
||||||
|
description: Middlewares defines the list of references to MiddlewareTCP
|
||||||
|
resources.
|
||||||
|
items:
|
||||||
|
description: ObjectReference is a generic reference to a Traefik
|
||||||
|
resource.
|
||||||
|
properties:
|
||||||
|
name:
|
||||||
|
description: Name defines the name of the referenced Traefik
|
||||||
|
resource.
|
||||||
|
type: string
|
||||||
|
namespace:
|
||||||
|
description: Namespace defines the namespace of the referenced
|
||||||
|
Traefik resource.
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- name
|
||||||
|
type: object
|
||||||
|
type: array
|
||||||
|
priority:
|
||||||
|
description: |-
|
||||||
|
Priority defines the router's priority.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/routers/#priority_1
|
||||||
|
type: integer
|
||||||
|
services:
|
||||||
|
description: Services defines the list of TCP services.
|
||||||
|
items:
|
||||||
|
description: ServiceTCP defines an upstream TCP service to
|
||||||
|
proxy traffic to.
|
||||||
|
properties:
|
||||||
|
name:
|
||||||
|
description: Name defines the name of the referenced Kubernetes
|
||||||
|
Service.
|
||||||
|
type: string
|
||||||
|
namespace:
|
||||||
|
description: Namespace defines the namespace of the referenced
|
||||||
|
Kubernetes Service.
|
||||||
|
type: string
|
||||||
|
nativeLB:
|
||||||
|
description: |-
|
||||||
|
NativeLB controls, when creating the load-balancer,
|
||||||
|
whether the LB's children are directly the pods IPs or if the only child is the Kubernetes Service clusterIP.
|
||||||
|
The Kubernetes Service itself does load-balance to the pods.
|
||||||
|
By default, NativeLB is false.
|
||||||
|
type: boolean
|
||||||
|
port:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Port defines the port of a Kubernetes Service.
|
||||||
|
This can be a reference to a named port.
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
proxyProtocol:
|
||||||
|
description: |-
|
||||||
|
ProxyProtocol defines the PROXY protocol configuration.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/services/#proxy-protocol
|
||||||
|
properties:
|
||||||
|
version:
|
||||||
|
description: Version defines the PROXY Protocol version
|
||||||
|
to use.
|
||||||
|
type: integer
|
||||||
|
type: object
|
||||||
|
terminationDelay:
|
||||||
|
description: |-
|
||||||
|
TerminationDelay defines the deadline that the proxy sets, after one of its connected peers indicates
|
||||||
|
it has closed the writing capability of its connection, to close the reading capability as well,
|
||||||
|
hence fully terminating the connection.
|
||||||
|
It is a duration in milliseconds, defaulting to 100.
|
||||||
|
A negative value means an infinite deadline (i.e. the reading capability is never closed).
|
||||||
|
type: integer
|
||||||
|
weight:
|
||||||
|
description: Weight defines the weight used when balancing
|
||||||
|
requests between multiple Kubernetes Service.
|
||||||
|
type: integer
|
||||||
|
required:
|
||||||
|
- name
|
||||||
|
- port
|
||||||
|
type: object
|
||||||
|
type: array
|
||||||
|
required:
|
||||||
|
- match
|
||||||
|
type: object
|
||||||
|
type: array
|
||||||
|
tls:
|
||||||
|
description: |-
|
||||||
|
TLS defines the TLS configuration on a layer 4 / TCP Route.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/routers/#tls_1
|
||||||
|
properties:
|
||||||
|
certResolver:
|
||||||
|
description: |-
|
||||||
|
CertResolver defines the name of the certificate resolver to use.
|
||||||
|
Cert resolvers have to be configured in the static configuration.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/https/acme/#certificate-resolvers
|
||||||
|
type: string
|
||||||
|
domains:
|
||||||
|
description: |-
|
||||||
|
Domains defines the list of domains that will be used to issue certificates.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/routers/#domains
|
||||||
|
items:
|
||||||
|
description: Domain holds a domain name with SANs.
|
||||||
|
properties:
|
||||||
|
main:
|
||||||
|
description: Main defines the main domain name.
|
||||||
|
type: string
|
||||||
|
sans:
|
||||||
|
description: SANs defines the subject alternative domain
|
||||||
|
names.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
type: object
|
||||||
|
type: array
|
||||||
|
options:
|
||||||
|
description: |-
|
||||||
|
Options defines the reference to a TLSOption, that specifies the parameters of the TLS connection.
|
||||||
|
If not defined, the `default` TLSOption is used.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/https/tls/#tls-options
|
||||||
|
properties:
|
||||||
|
name:
|
||||||
|
description: Name defines the name of the referenced Traefik
|
||||||
|
resource.
|
||||||
|
type: string
|
||||||
|
namespace:
|
||||||
|
description: Namespace defines the namespace of the referenced
|
||||||
|
Traefik resource.
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- name
|
||||||
|
type: object
|
||||||
|
passthrough:
|
||||||
|
description: Passthrough defines whether a TLS router will terminate
|
||||||
|
the TLS connection.
|
||||||
|
type: boolean
|
||||||
|
secretName:
|
||||||
|
description: SecretName is the name of the referenced Kubernetes
|
||||||
|
Secret to specify the certificate details.
|
||||||
|
type: string
|
||||||
|
store:
|
||||||
|
description: |-
|
||||||
|
Store defines the reference to the TLSStore, that will be used to store certificates.
|
||||||
|
Please note that only `default` TLSStore can be used.
|
||||||
|
properties:
|
||||||
|
name:
|
||||||
|
description: Name defines the name of the referenced Traefik
|
||||||
|
resource.
|
||||||
|
type: string
|
||||||
|
namespace:
|
||||||
|
description: Namespace defines the namespace of the referenced
|
||||||
|
Traefik resource.
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- name
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- routes
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- metadata
|
||||||
|
- spec
|
||||||
|
type: object
|
||||||
|
served: true
|
||||||
|
storage: true
|
|
@ -0,0 +1,104 @@
|
||||||
|
---
|
||||||
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
|
kind: CustomResourceDefinition
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
controller-gen.kubebuilder.io/version: v0.14.0
|
||||||
|
name: ingressrouteudps.traefik.io
|
||||||
|
spec:
|
||||||
|
group: traefik.io
|
||||||
|
names:
|
||||||
|
kind: IngressRouteUDP
|
||||||
|
listKind: IngressRouteUDPList
|
||||||
|
plural: ingressrouteudps
|
||||||
|
singular: ingressrouteudp
|
||||||
|
scope: Namespaced
|
||||||
|
versions:
|
||||||
|
- name: v1alpha1
|
||||||
|
schema:
|
||||||
|
openAPIV3Schema:
|
||||||
|
description: IngressRouteUDP is a CRD implementation of a Traefik UDP Router.
|
||||||
|
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: IngressRouteUDPSpec defines the desired state of a IngressRouteUDP.
|
||||||
|
properties:
|
||||||
|
entryPoints:
|
||||||
|
description: |-
|
||||||
|
EntryPoints defines the list of entry point names to bind to.
|
||||||
|
Entry points have to be configured in the static configuration.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/entrypoints/
|
||||||
|
Default: all.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
routes:
|
||||||
|
description: Routes defines the list of routes.
|
||||||
|
items:
|
||||||
|
description: RouteUDP holds the UDP route configuration.
|
||||||
|
properties:
|
||||||
|
services:
|
||||||
|
description: Services defines the list of UDP services.
|
||||||
|
items:
|
||||||
|
description: ServiceUDP defines an upstream UDP service to
|
||||||
|
proxy traffic to.
|
||||||
|
properties:
|
||||||
|
name:
|
||||||
|
description: Name defines the name of the referenced Kubernetes
|
||||||
|
Service.
|
||||||
|
type: string
|
||||||
|
namespace:
|
||||||
|
description: Namespace defines the namespace of the referenced
|
||||||
|
Kubernetes Service.
|
||||||
|
type: string
|
||||||
|
nativeLB:
|
||||||
|
description: |-
|
||||||
|
NativeLB controls, when creating the load-balancer,
|
||||||
|
whether the LB's children are directly the pods IPs or if the only child is the Kubernetes Service clusterIP.
|
||||||
|
The Kubernetes Service itself does load-balance to the pods.
|
||||||
|
By default, NativeLB is false.
|
||||||
|
type: boolean
|
||||||
|
port:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Port defines the port of a Kubernetes Service.
|
||||||
|
This can be a reference to a named port.
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
weight:
|
||||||
|
description: Weight defines the weight used when balancing
|
||||||
|
requests between multiple Kubernetes Service.
|
||||||
|
type: integer
|
||||||
|
required:
|
||||||
|
- name
|
||||||
|
- port
|
||||||
|
type: object
|
||||||
|
type: array
|
||||||
|
type: object
|
||||||
|
type: array
|
||||||
|
required:
|
||||||
|
- routes
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- metadata
|
||||||
|
- spec
|
||||||
|
type: object
|
||||||
|
served: true
|
||||||
|
storage: true
|
980
traefik/base/charts/traefik/crds/traefik.io_middlewares.yaml
Normal file
980
traefik/base/charts/traefik/crds/traefik.io_middlewares.yaml
Normal file
|
@ -0,0 +1,980 @@
|
||||||
|
---
|
||||||
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
|
kind: CustomResourceDefinition
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
controller-gen.kubebuilder.io/version: v0.14.0
|
||||||
|
name: middlewares.traefik.io
|
||||||
|
spec:
|
||||||
|
group: traefik.io
|
||||||
|
names:
|
||||||
|
kind: Middleware
|
||||||
|
listKind: MiddlewareList
|
||||||
|
plural: middlewares
|
||||||
|
singular: middleware
|
||||||
|
scope: Namespaced
|
||||||
|
versions:
|
||||||
|
- name: v1alpha1
|
||||||
|
schema:
|
||||||
|
openAPIV3Schema:
|
||||||
|
description: |-
|
||||||
|
Middleware is the CRD implementation of a Traefik Middleware.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/overview/
|
||||||
|
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: MiddlewareSpec defines the desired state of a Middleware.
|
||||||
|
properties:
|
||||||
|
addPrefix:
|
||||||
|
description: |-
|
||||||
|
AddPrefix holds the add prefix middleware configuration.
|
||||||
|
This middleware updates the path of a request before forwarding it.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/addprefix/
|
||||||
|
properties:
|
||||||
|
prefix:
|
||||||
|
description: |-
|
||||||
|
Prefix is the string to add before the current path in the requested URL.
|
||||||
|
It should include a leading slash (/).
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
basicAuth:
|
||||||
|
description: |-
|
||||||
|
BasicAuth holds the basic auth middleware configuration.
|
||||||
|
This middleware restricts access to your services to known users.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/basicauth/
|
||||||
|
properties:
|
||||||
|
headerField:
|
||||||
|
description: |-
|
||||||
|
HeaderField defines a header field to store the authenticated user.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/basicauth/#headerfield
|
||||||
|
type: string
|
||||||
|
realm:
|
||||||
|
description: |-
|
||||||
|
Realm allows the protected resources on a server to be partitioned into a set of protection spaces, each with its own authentication scheme.
|
||||||
|
Default: traefik.
|
||||||
|
type: string
|
||||||
|
removeHeader:
|
||||||
|
description: |-
|
||||||
|
RemoveHeader sets the removeHeader option to true to remove the authorization header before forwarding the request to your service.
|
||||||
|
Default: false.
|
||||||
|
type: boolean
|
||||||
|
secret:
|
||||||
|
description: Secret is the name of the referenced Kubernetes Secret
|
||||||
|
containing user credentials.
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
buffering:
|
||||||
|
description: |-
|
||||||
|
Buffering holds the buffering middleware configuration.
|
||||||
|
This middleware retries or limits the size of requests that can be forwarded to backends.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/buffering/#maxrequestbodybytes
|
||||||
|
properties:
|
||||||
|
maxRequestBodyBytes:
|
||||||
|
description: |-
|
||||||
|
MaxRequestBodyBytes defines the maximum allowed body size for the request (in bytes).
|
||||||
|
If the request exceeds the allowed size, it is not forwarded to the service, and the client gets a 413 (Request Entity Too Large) response.
|
||||||
|
Default: 0 (no maximum).
|
||||||
|
format: int64
|
||||||
|
type: integer
|
||||||
|
maxResponseBodyBytes:
|
||||||
|
description: |-
|
||||||
|
MaxResponseBodyBytes defines the maximum allowed response size from the service (in bytes).
|
||||||
|
If the response exceeds the allowed size, it is not forwarded to the client. The client gets a 500 (Internal Server Error) response instead.
|
||||||
|
Default: 0 (no maximum).
|
||||||
|
format: int64
|
||||||
|
type: integer
|
||||||
|
memRequestBodyBytes:
|
||||||
|
description: |-
|
||||||
|
MemRequestBodyBytes defines the threshold (in bytes) from which the request will be buffered on disk instead of in memory.
|
||||||
|
Default: 1048576 (1Mi).
|
||||||
|
format: int64
|
||||||
|
type: integer
|
||||||
|
memResponseBodyBytes:
|
||||||
|
description: |-
|
||||||
|
MemResponseBodyBytes defines the threshold (in bytes) from which the response will be buffered on disk instead of in memory.
|
||||||
|
Default: 1048576 (1Mi).
|
||||||
|
format: int64
|
||||||
|
type: integer
|
||||||
|
retryExpression:
|
||||||
|
description: |-
|
||||||
|
RetryExpression defines the retry conditions.
|
||||||
|
It is a logical combination of functions with operators AND (&&) and OR (||).
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/buffering/#retryexpression
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
chain:
|
||||||
|
description: |-
|
||||||
|
Chain holds the configuration of the chain middleware.
|
||||||
|
This middleware enables to define reusable combinations of other pieces of middleware.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/chain/
|
||||||
|
properties:
|
||||||
|
middlewares:
|
||||||
|
description: Middlewares is the list of MiddlewareRef which composes
|
||||||
|
the chain.
|
||||||
|
items:
|
||||||
|
description: MiddlewareRef is a reference to a Middleware resource.
|
||||||
|
properties:
|
||||||
|
name:
|
||||||
|
description: Name defines the name of the referenced Middleware
|
||||||
|
resource.
|
||||||
|
type: string
|
||||||
|
namespace:
|
||||||
|
description: Namespace defines the namespace of the referenced
|
||||||
|
Middleware resource.
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- name
|
||||||
|
type: object
|
||||||
|
type: array
|
||||||
|
type: object
|
||||||
|
circuitBreaker:
|
||||||
|
description: CircuitBreaker holds the circuit breaker configuration.
|
||||||
|
properties:
|
||||||
|
checkPeriod:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: CheckPeriod is the interval between successive checks
|
||||||
|
of the circuit breaker condition (when in standby state).
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
expression:
|
||||||
|
description: Expression is the condition that triggers the tripped
|
||||||
|
state.
|
||||||
|
type: string
|
||||||
|
fallbackDuration:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: FallbackDuration is the duration for which the circuit
|
||||||
|
breaker will wait before trying to recover (from a tripped state).
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
recoveryDuration:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: RecoveryDuration is the duration for which the circuit
|
||||||
|
breaker will try to recover (as soon as it is in recovering
|
||||||
|
state).
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
type: object
|
||||||
|
compress:
|
||||||
|
description: |-
|
||||||
|
Compress holds the compress middleware configuration.
|
||||||
|
This middleware compresses responses before sending them to the client, using gzip compression.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/compress/
|
||||||
|
properties:
|
||||||
|
excludedContentTypes:
|
||||||
|
description: ExcludedContentTypes defines the list of content
|
||||||
|
types to compare the Content-Type header of the incoming requests
|
||||||
|
and responses before compressing.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
minResponseBodyBytes:
|
||||||
|
description: |-
|
||||||
|
MinResponseBodyBytes defines the minimum amount of bytes a response body must have to be compressed.
|
||||||
|
Default: 1024.
|
||||||
|
type: integer
|
||||||
|
type: object
|
||||||
|
contentType:
|
||||||
|
description: |-
|
||||||
|
ContentType holds the content-type middleware configuration.
|
||||||
|
This middleware exists to enable the correct behavior until at least the default one can be changed in a future version.
|
||||||
|
properties:
|
||||||
|
autoDetect:
|
||||||
|
description: |-
|
||||||
|
AutoDetect specifies whether to let the `Content-Type` header, if it has not been set by the backend,
|
||||||
|
be automatically set to a value derived from the contents of the response.
|
||||||
|
As a proxy, the default behavior should be to leave the header alone, regardless of what the backend did with it.
|
||||||
|
However, the historic default was to always auto-detect and set the header if it was nil,
|
||||||
|
and it is going to be kept that way in order to support users currently relying on it.
|
||||||
|
type: boolean
|
||||||
|
type: object
|
||||||
|
digestAuth:
|
||||||
|
description: |-
|
||||||
|
DigestAuth holds the digest auth middleware configuration.
|
||||||
|
This middleware restricts access to your services to known users.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/digestauth/
|
||||||
|
properties:
|
||||||
|
headerField:
|
||||||
|
description: |-
|
||||||
|
HeaderField defines a header field to store the authenticated user.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/basicauth/#headerfield
|
||||||
|
type: string
|
||||||
|
realm:
|
||||||
|
description: |-
|
||||||
|
Realm allows the protected resources on a server to be partitioned into a set of protection spaces, each with its own authentication scheme.
|
||||||
|
Default: traefik.
|
||||||
|
type: string
|
||||||
|
removeHeader:
|
||||||
|
description: RemoveHeader defines whether to remove the authorization
|
||||||
|
header before forwarding the request to the backend.
|
||||||
|
type: boolean
|
||||||
|
secret:
|
||||||
|
description: Secret is the name of the referenced Kubernetes Secret
|
||||||
|
containing user credentials.
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
errors:
|
||||||
|
description: |-
|
||||||
|
ErrorPage holds the custom error middleware configuration.
|
||||||
|
This middleware returns a custom page in lieu of the default, according to configured ranges of HTTP Status codes.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/errorpages/
|
||||||
|
properties:
|
||||||
|
query:
|
||||||
|
description: |-
|
||||||
|
Query defines the URL for the error page (hosted by service).
|
||||||
|
The {status} variable can be used in order to insert the status code in the URL.
|
||||||
|
type: string
|
||||||
|
service:
|
||||||
|
description: |-
|
||||||
|
Service defines the reference to a Kubernetes Service that will serve the error page.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/errorpages/#service
|
||||||
|
properties:
|
||||||
|
kind:
|
||||||
|
description: Kind defines the kind of the Service.
|
||||||
|
enum:
|
||||||
|
- Service
|
||||||
|
- TraefikService
|
||||||
|
type: string
|
||||||
|
name:
|
||||||
|
description: |-
|
||||||
|
Name defines the name of the referenced Kubernetes Service or TraefikService.
|
||||||
|
The differentiation between the two is specified in the Kind field.
|
||||||
|
type: string
|
||||||
|
namespace:
|
||||||
|
description: Namespace defines the namespace of the referenced
|
||||||
|
Kubernetes Service or TraefikService.
|
||||||
|
type: string
|
||||||
|
nativeLB:
|
||||||
|
description: |-
|
||||||
|
NativeLB controls, when creating the load-balancer,
|
||||||
|
whether the LB's children are directly the pods IPs or if the only child is the Kubernetes Service clusterIP.
|
||||||
|
The Kubernetes Service itself does load-balance to the pods.
|
||||||
|
By default, NativeLB is false.
|
||||||
|
type: boolean
|
||||||
|
passHostHeader:
|
||||||
|
description: |-
|
||||||
|
PassHostHeader defines whether the client Host header is forwarded to the upstream Kubernetes Service.
|
||||||
|
By default, passHostHeader is true.
|
||||||
|
type: boolean
|
||||||
|
port:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Port defines the port of a Kubernetes Service.
|
||||||
|
This can be a reference to a named port.
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
responseForwarding:
|
||||||
|
description: ResponseForwarding defines how Traefik forwards
|
||||||
|
the response from the upstream Kubernetes Service to the
|
||||||
|
client.
|
||||||
|
properties:
|
||||||
|
flushInterval:
|
||||||
|
description: |-
|
||||||
|
FlushInterval defines the interval, in milliseconds, in between flushes to the client while copying the response body.
|
||||||
|
A negative value means to flush immediately after each write to the client.
|
||||||
|
This configuration is ignored when ReverseProxy recognizes a response as a streaming response;
|
||||||
|
for such responses, writes are flushed to the client immediately.
|
||||||
|
Default: 100ms
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
scheme:
|
||||||
|
description: |-
|
||||||
|
Scheme defines the scheme to use for the request to the upstream Kubernetes Service.
|
||||||
|
It defaults to https when Kubernetes Service port is 443, http otherwise.
|
||||||
|
type: string
|
||||||
|
serversTransport:
|
||||||
|
description: |-
|
||||||
|
ServersTransport defines the name of ServersTransport resource to use.
|
||||||
|
It allows to configure the transport between Traefik and your servers.
|
||||||
|
Can only be used on a Kubernetes Service.
|
||||||
|
type: string
|
||||||
|
sticky:
|
||||||
|
description: |-
|
||||||
|
Sticky defines the sticky sessions configuration.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/services/#sticky-sessions
|
||||||
|
properties:
|
||||||
|
cookie:
|
||||||
|
description: Cookie defines the sticky cookie configuration.
|
||||||
|
properties:
|
||||||
|
httpOnly:
|
||||||
|
description: HTTPOnly defines whether the cookie can
|
||||||
|
be accessed by client-side APIs, such as JavaScript.
|
||||||
|
type: boolean
|
||||||
|
name:
|
||||||
|
description: Name defines the Cookie name.
|
||||||
|
type: string
|
||||||
|
sameSite:
|
||||||
|
description: |-
|
||||||
|
SameSite defines the same site policy.
|
||||||
|
More info: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite
|
||||||
|
type: string
|
||||||
|
secure:
|
||||||
|
description: Secure defines whether the cookie can
|
||||||
|
only be transmitted over an encrypted connection
|
||||||
|
(i.e. HTTPS).
|
||||||
|
type: boolean
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
strategy:
|
||||||
|
description: |-
|
||||||
|
Strategy defines the load balancing strategy between the servers.
|
||||||
|
RoundRobin is the only supported value at the moment.
|
||||||
|
type: string
|
||||||
|
weight:
|
||||||
|
description: |-
|
||||||
|
Weight defines the weight and should only be specified when Name references a TraefikService object
|
||||||
|
(and to be precise, one that embeds a Weighted Round Robin).
|
||||||
|
type: integer
|
||||||
|
required:
|
||||||
|
- name
|
||||||
|
type: object
|
||||||
|
status:
|
||||||
|
description: |-
|
||||||
|
Status defines which status or range of statuses should result in an error page.
|
||||||
|
It can be either a status code as a number (500),
|
||||||
|
as multiple comma-separated numbers (500,502),
|
||||||
|
as ranges by separating two codes with a dash (500-599),
|
||||||
|
or a combination of the two (404,418,500-599).
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
type: object
|
||||||
|
forwardAuth:
|
||||||
|
description: |-
|
||||||
|
ForwardAuth holds the forward auth middleware configuration.
|
||||||
|
This middleware delegates the request authentication to a Service.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/forwardauth/
|
||||||
|
properties:
|
||||||
|
address:
|
||||||
|
description: Address defines the authentication server address.
|
||||||
|
type: string
|
||||||
|
authRequestHeaders:
|
||||||
|
description: |-
|
||||||
|
AuthRequestHeaders defines the list of the headers to copy from the request to the authentication server.
|
||||||
|
If not set or empty then all request headers are passed.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
authResponseHeaders:
|
||||||
|
description: AuthResponseHeaders defines the list of headers to
|
||||||
|
copy from the authentication server response and set on forwarded
|
||||||
|
request, replacing any existing conflicting headers.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
authResponseHeadersRegex:
|
||||||
|
description: |-
|
||||||
|
AuthResponseHeadersRegex defines the regex to match headers to copy from the authentication server response and set on forwarded request, after stripping all headers that match the regex.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/forwardauth/#authresponseheadersregex
|
||||||
|
type: string
|
||||||
|
tls:
|
||||||
|
description: TLS defines the configuration used to secure the
|
||||||
|
connection to the authentication server.
|
||||||
|
properties:
|
||||||
|
caOptional:
|
||||||
|
type: boolean
|
||||||
|
caSecret:
|
||||||
|
description: |-
|
||||||
|
CASecret is the name of the referenced Kubernetes Secret containing the CA to validate the server certificate.
|
||||||
|
The CA certificate is extracted from key `tls.ca` or `ca.crt`.
|
||||||
|
type: string
|
||||||
|
certSecret:
|
||||||
|
description: |-
|
||||||
|
CertSecret is the name of the referenced Kubernetes Secret containing the client certificate.
|
||||||
|
The client certificate is extracted from the keys `tls.crt` and `tls.key`.
|
||||||
|
type: string
|
||||||
|
insecureSkipVerify:
|
||||||
|
description: InsecureSkipVerify defines whether the server
|
||||||
|
certificates should be validated.
|
||||||
|
type: boolean
|
||||||
|
type: object
|
||||||
|
trustForwardHeader:
|
||||||
|
description: 'TrustForwardHeader defines whether to trust (ie:
|
||||||
|
forward) all X-Forwarded-* headers.'
|
||||||
|
type: boolean
|
||||||
|
type: object
|
||||||
|
headers:
|
||||||
|
description: |-
|
||||||
|
Headers holds the headers middleware configuration.
|
||||||
|
This middleware manages the requests and responses headers.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/headers/#customrequestheaders
|
||||||
|
properties:
|
||||||
|
accessControlAllowCredentials:
|
||||||
|
description: AccessControlAllowCredentials defines whether the
|
||||||
|
request can include user credentials.
|
||||||
|
type: boolean
|
||||||
|
accessControlAllowHeaders:
|
||||||
|
description: AccessControlAllowHeaders defines the Access-Control-Request-Headers
|
||||||
|
values sent in preflight response.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
accessControlAllowMethods:
|
||||||
|
description: AccessControlAllowMethods defines the Access-Control-Request-Method
|
||||||
|
values sent in preflight response.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
accessControlAllowOriginList:
|
||||||
|
description: AccessControlAllowOriginList is a list of allowable
|
||||||
|
origins. Can also be a wildcard origin "*".
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
accessControlAllowOriginListRegex:
|
||||||
|
description: AccessControlAllowOriginListRegex is a list of allowable
|
||||||
|
origins written following the Regular Expression syntax (https://golang.org/pkg/regexp/).
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
accessControlExposeHeaders:
|
||||||
|
description: AccessControlExposeHeaders defines the Access-Control-Expose-Headers
|
||||||
|
values sent in preflight response.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
accessControlMaxAge:
|
||||||
|
description: AccessControlMaxAge defines the time that a preflight
|
||||||
|
request may be cached.
|
||||||
|
format: int64
|
||||||
|
type: integer
|
||||||
|
addVaryHeader:
|
||||||
|
description: AddVaryHeader defines whether the Vary header is
|
||||||
|
automatically added/updated when the AccessControlAllowOriginList
|
||||||
|
is set.
|
||||||
|
type: boolean
|
||||||
|
allowedHosts:
|
||||||
|
description: AllowedHosts defines the fully qualified list of
|
||||||
|
allowed domain names.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
browserXssFilter:
|
||||||
|
description: BrowserXSSFilter defines whether to add the X-XSS-Protection
|
||||||
|
header with the value 1; mode=block.
|
||||||
|
type: boolean
|
||||||
|
contentSecurityPolicy:
|
||||||
|
description: ContentSecurityPolicy defines the Content-Security-Policy
|
||||||
|
header value.
|
||||||
|
type: string
|
||||||
|
contentTypeNosniff:
|
||||||
|
description: ContentTypeNosniff defines whether to add the X-Content-Type-Options
|
||||||
|
header with the nosniff value.
|
||||||
|
type: boolean
|
||||||
|
customBrowserXSSValue:
|
||||||
|
description: |-
|
||||||
|
CustomBrowserXSSValue defines the X-XSS-Protection header value.
|
||||||
|
This overrides the BrowserXssFilter option.
|
||||||
|
type: string
|
||||||
|
customFrameOptionsValue:
|
||||||
|
description: |-
|
||||||
|
CustomFrameOptionsValue defines the X-Frame-Options header value.
|
||||||
|
This overrides the FrameDeny option.
|
||||||
|
type: string
|
||||||
|
customRequestHeaders:
|
||||||
|
additionalProperties:
|
||||||
|
type: string
|
||||||
|
description: CustomRequestHeaders defines the header names and
|
||||||
|
values to apply to the request.
|
||||||
|
type: object
|
||||||
|
customResponseHeaders:
|
||||||
|
additionalProperties:
|
||||||
|
type: string
|
||||||
|
description: CustomResponseHeaders defines the header names and
|
||||||
|
values to apply to the response.
|
||||||
|
type: object
|
||||||
|
featurePolicy:
|
||||||
|
description: 'Deprecated: use PermissionsPolicy instead.'
|
||||||
|
type: string
|
||||||
|
forceSTSHeader:
|
||||||
|
description: ForceSTSHeader defines whether to add the STS header
|
||||||
|
even when the connection is HTTP.
|
||||||
|
type: boolean
|
||||||
|
frameDeny:
|
||||||
|
description: FrameDeny defines whether to add the X-Frame-Options
|
||||||
|
header with the DENY value.
|
||||||
|
type: boolean
|
||||||
|
hostsProxyHeaders:
|
||||||
|
description: HostsProxyHeaders defines the header keys that may
|
||||||
|
hold a proxied hostname value for the request.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
isDevelopment:
|
||||||
|
description: |-
|
||||||
|
IsDevelopment defines whether to mitigate the unwanted effects of the AllowedHosts, SSL, and STS options when developing.
|
||||||
|
Usually testing takes place using HTTP, not HTTPS, and on localhost, not your production domain.
|
||||||
|
If you would like your development environment to mimic production with complete Host blocking, SSL redirects,
|
||||||
|
and STS headers, leave this as false.
|
||||||
|
type: boolean
|
||||||
|
permissionsPolicy:
|
||||||
|
description: |-
|
||||||
|
PermissionsPolicy defines the Permissions-Policy header value.
|
||||||
|
This allows sites to control browser features.
|
||||||
|
type: string
|
||||||
|
publicKey:
|
||||||
|
description: PublicKey is the public key that implements HPKP
|
||||||
|
to prevent MITM attacks with forged certificates.
|
||||||
|
type: string
|
||||||
|
referrerPolicy:
|
||||||
|
description: |-
|
||||||
|
ReferrerPolicy defines the Referrer-Policy header value.
|
||||||
|
This allows sites to control whether browsers forward the Referer header to other sites.
|
||||||
|
type: string
|
||||||
|
sslForceHost:
|
||||||
|
description: 'Deprecated: use RedirectRegex instead.'
|
||||||
|
type: boolean
|
||||||
|
sslHost:
|
||||||
|
description: 'Deprecated: use RedirectRegex instead.'
|
||||||
|
type: string
|
||||||
|
sslProxyHeaders:
|
||||||
|
additionalProperties:
|
||||||
|
type: string
|
||||||
|
description: |-
|
||||||
|
SSLProxyHeaders defines the header keys with associated values that would indicate a valid HTTPS request.
|
||||||
|
It can be useful when using other proxies (example: "X-Forwarded-Proto": "https").
|
||||||
|
type: object
|
||||||
|
sslRedirect:
|
||||||
|
description: 'Deprecated: use EntryPoint redirection or RedirectScheme
|
||||||
|
instead.'
|
||||||
|
type: boolean
|
||||||
|
sslTemporaryRedirect:
|
||||||
|
description: 'Deprecated: use EntryPoint redirection or RedirectScheme
|
||||||
|
instead.'
|
||||||
|
type: boolean
|
||||||
|
stsIncludeSubdomains:
|
||||||
|
description: STSIncludeSubdomains defines whether the includeSubDomains
|
||||||
|
directive is appended to the Strict-Transport-Security header.
|
||||||
|
type: boolean
|
||||||
|
stsPreload:
|
||||||
|
description: STSPreload defines whether the preload flag is appended
|
||||||
|
to the Strict-Transport-Security header.
|
||||||
|
type: boolean
|
||||||
|
stsSeconds:
|
||||||
|
description: |-
|
||||||
|
STSSeconds defines the max-age of the Strict-Transport-Security header.
|
||||||
|
If set to 0, the header is not set.
|
||||||
|
format: int64
|
||||||
|
type: integer
|
||||||
|
type: object
|
||||||
|
inFlightReq:
|
||||||
|
description: |-
|
||||||
|
InFlightReq holds the in-flight request middleware configuration.
|
||||||
|
This middleware limits the number of requests being processed and served concurrently.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/inflightreq/
|
||||||
|
properties:
|
||||||
|
amount:
|
||||||
|
description: |-
|
||||||
|
Amount defines the maximum amount of allowed simultaneous in-flight request.
|
||||||
|
The middleware responds with HTTP 429 Too Many Requests if there are already amount requests in progress (based on the same sourceCriterion strategy).
|
||||||
|
format: int64
|
||||||
|
type: integer
|
||||||
|
sourceCriterion:
|
||||||
|
description: |-
|
||||||
|
SourceCriterion defines what criterion is used to group requests as originating from a common source.
|
||||||
|
If several strategies are defined at the same time, an error will be raised.
|
||||||
|
If none are set, the default is to use the requestHost.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/inflightreq/#sourcecriterion
|
||||||
|
properties:
|
||||||
|
ipStrategy:
|
||||||
|
description: |-
|
||||||
|
IPStrategy holds the IP strategy configuration used by Traefik to determine the client IP.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/ipallowlist/#ipstrategy
|
||||||
|
properties:
|
||||||
|
depth:
|
||||||
|
description: Depth tells Traefik to use the X-Forwarded-For
|
||||||
|
header and take the IP located at the depth position
|
||||||
|
(starting from the right).
|
||||||
|
type: integer
|
||||||
|
excludedIPs:
|
||||||
|
description: ExcludedIPs configures Traefik to scan the
|
||||||
|
X-Forwarded-For header and select the first IP not in
|
||||||
|
the list.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
type: object
|
||||||
|
requestHeaderName:
|
||||||
|
description: RequestHeaderName defines the name of the header
|
||||||
|
used to group incoming requests.
|
||||||
|
type: string
|
||||||
|
requestHost:
|
||||||
|
description: RequestHost defines whether to consider the request
|
||||||
|
Host as the source.
|
||||||
|
type: boolean
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
ipAllowList:
|
||||||
|
description: |-
|
||||||
|
IPAllowList holds the IP allowlist middleware configuration.
|
||||||
|
This middleware accepts / refuses requests based on the client IP.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/ipallowlist/
|
||||||
|
properties:
|
||||||
|
ipStrategy:
|
||||||
|
description: |-
|
||||||
|
IPStrategy holds the IP strategy configuration used by Traefik to determine the client IP.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/ipallowlist/#ipstrategy
|
||||||
|
properties:
|
||||||
|
depth:
|
||||||
|
description: Depth tells Traefik to use the X-Forwarded-For
|
||||||
|
header and take the IP located at the depth position (starting
|
||||||
|
from the right).
|
||||||
|
type: integer
|
||||||
|
excludedIPs:
|
||||||
|
description: ExcludedIPs configures Traefik to scan the X-Forwarded-For
|
||||||
|
header and select the first IP not in the list.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
type: object
|
||||||
|
sourceRange:
|
||||||
|
description: SourceRange defines the set of allowed IPs (or ranges
|
||||||
|
of allowed IPs by using CIDR notation).
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
type: object
|
||||||
|
ipWhiteList:
|
||||||
|
description: |-
|
||||||
|
IPWhiteList holds the IP whitelist middleware configuration.
|
||||||
|
This middleware accepts / refuses requests based on the client IP.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/ipwhitelist/
|
||||||
|
Deprecated: please use IPAllowList instead.
|
||||||
|
properties:
|
||||||
|
ipStrategy:
|
||||||
|
description: |-
|
||||||
|
IPStrategy holds the IP strategy configuration used by Traefik to determine the client IP.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/ipallowlist/#ipstrategy
|
||||||
|
properties:
|
||||||
|
depth:
|
||||||
|
description: Depth tells Traefik to use the X-Forwarded-For
|
||||||
|
header and take the IP located at the depth position (starting
|
||||||
|
from the right).
|
||||||
|
type: integer
|
||||||
|
excludedIPs:
|
||||||
|
description: ExcludedIPs configures Traefik to scan the X-Forwarded-For
|
||||||
|
header and select the first IP not in the list.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
type: object
|
||||||
|
sourceRange:
|
||||||
|
description: SourceRange defines the set of allowed IPs (or ranges
|
||||||
|
of allowed IPs by using CIDR notation).
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
type: object
|
||||||
|
passTLSClientCert:
|
||||||
|
description: |-
|
||||||
|
PassTLSClientCert holds the pass TLS client cert middleware configuration.
|
||||||
|
This middleware adds the selected data from the passed client TLS certificate to a header.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/passtlsclientcert/
|
||||||
|
properties:
|
||||||
|
info:
|
||||||
|
description: Info selects the specific client certificate details
|
||||||
|
you want to add to the X-Forwarded-Tls-Client-Cert-Info header.
|
||||||
|
properties:
|
||||||
|
issuer:
|
||||||
|
description: Issuer defines the client certificate issuer
|
||||||
|
details to add to the X-Forwarded-Tls-Client-Cert-Info header.
|
||||||
|
properties:
|
||||||
|
commonName:
|
||||||
|
description: CommonName defines whether to add the organizationalUnit
|
||||||
|
information into the issuer.
|
||||||
|
type: boolean
|
||||||
|
country:
|
||||||
|
description: Country defines whether to add the country
|
||||||
|
information into the issuer.
|
||||||
|
type: boolean
|
||||||
|
domainComponent:
|
||||||
|
description: DomainComponent defines whether to add the
|
||||||
|
domainComponent information into the issuer.
|
||||||
|
type: boolean
|
||||||
|
locality:
|
||||||
|
description: Locality defines whether to add the locality
|
||||||
|
information into the issuer.
|
||||||
|
type: boolean
|
||||||
|
organization:
|
||||||
|
description: Organization defines whether to add the organization
|
||||||
|
information into the issuer.
|
||||||
|
type: boolean
|
||||||
|
province:
|
||||||
|
description: Province defines whether to add the province
|
||||||
|
information into the issuer.
|
||||||
|
type: boolean
|
||||||
|
serialNumber:
|
||||||
|
description: SerialNumber defines whether to add the serialNumber
|
||||||
|
information into the issuer.
|
||||||
|
type: boolean
|
||||||
|
type: object
|
||||||
|
notAfter:
|
||||||
|
description: NotAfter defines whether to add the Not After
|
||||||
|
information from the Validity part.
|
||||||
|
type: boolean
|
||||||
|
notBefore:
|
||||||
|
description: NotBefore defines whether to add the Not Before
|
||||||
|
information from the Validity part.
|
||||||
|
type: boolean
|
||||||
|
sans:
|
||||||
|
description: Sans defines whether to add the Subject Alternative
|
||||||
|
Name information from the Subject Alternative Name part.
|
||||||
|
type: boolean
|
||||||
|
serialNumber:
|
||||||
|
description: SerialNumber defines whether to add the client
|
||||||
|
serialNumber information.
|
||||||
|
type: boolean
|
||||||
|
subject:
|
||||||
|
description: Subject defines the client certificate subject
|
||||||
|
details to add to the X-Forwarded-Tls-Client-Cert-Info header.
|
||||||
|
properties:
|
||||||
|
commonName:
|
||||||
|
description: CommonName defines whether to add the organizationalUnit
|
||||||
|
information into the subject.
|
||||||
|
type: boolean
|
||||||
|
country:
|
||||||
|
description: Country defines whether to add the country
|
||||||
|
information into the subject.
|
||||||
|
type: boolean
|
||||||
|
domainComponent:
|
||||||
|
description: DomainComponent defines whether to add the
|
||||||
|
domainComponent information into the subject.
|
||||||
|
type: boolean
|
||||||
|
locality:
|
||||||
|
description: Locality defines whether to add the locality
|
||||||
|
information into the subject.
|
||||||
|
type: boolean
|
||||||
|
organization:
|
||||||
|
description: Organization defines whether to add the organization
|
||||||
|
information into the subject.
|
||||||
|
type: boolean
|
||||||
|
organizationalUnit:
|
||||||
|
description: OrganizationalUnit defines whether to add
|
||||||
|
the organizationalUnit information into the subject.
|
||||||
|
type: boolean
|
||||||
|
province:
|
||||||
|
description: Province defines whether to add the province
|
||||||
|
information into the subject.
|
||||||
|
type: boolean
|
||||||
|
serialNumber:
|
||||||
|
description: SerialNumber defines whether to add the serialNumber
|
||||||
|
information into the subject.
|
||||||
|
type: boolean
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
pem:
|
||||||
|
description: PEM sets the X-Forwarded-Tls-Client-Cert header with
|
||||||
|
the certificate.
|
||||||
|
type: boolean
|
||||||
|
type: object
|
||||||
|
plugin:
|
||||||
|
additionalProperties:
|
||||||
|
x-kubernetes-preserve-unknown-fields: true
|
||||||
|
description: |-
|
||||||
|
Plugin defines the middleware plugin configuration.
|
||||||
|
More info: https://doc.traefik.io/traefik/plugins/
|
||||||
|
type: object
|
||||||
|
rateLimit:
|
||||||
|
description: |-
|
||||||
|
RateLimit holds the rate limit configuration.
|
||||||
|
This middleware ensures that services will receive a fair amount of requests, and allows one to define what fair is.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/ratelimit/
|
||||||
|
properties:
|
||||||
|
average:
|
||||||
|
description: |-
|
||||||
|
Average is the maximum rate, by default in requests/s, allowed for the given source.
|
||||||
|
It defaults to 0, which means no rate limiting.
|
||||||
|
The rate is actually defined by dividing Average by Period. So for a rate below 1req/s,
|
||||||
|
one needs to define a Period larger than a second.
|
||||||
|
format: int64
|
||||||
|
type: integer
|
||||||
|
burst:
|
||||||
|
description: |-
|
||||||
|
Burst is the maximum number of requests allowed to arrive in the same arbitrarily small period of time.
|
||||||
|
It defaults to 1.
|
||||||
|
format: int64
|
||||||
|
type: integer
|
||||||
|
period:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Period, in combination with Average, defines the actual maximum rate, such as:
|
||||||
|
r = Average / Period. It defaults to a second.
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
sourceCriterion:
|
||||||
|
description: |-
|
||||||
|
SourceCriterion defines what criterion is used to group requests as originating from a common source.
|
||||||
|
If several strategies are defined at the same time, an error will be raised.
|
||||||
|
If none are set, the default is to use the request's remote address field (as an ipStrategy).
|
||||||
|
properties:
|
||||||
|
ipStrategy:
|
||||||
|
description: |-
|
||||||
|
IPStrategy holds the IP strategy configuration used by Traefik to determine the client IP.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/ipallowlist/#ipstrategy
|
||||||
|
properties:
|
||||||
|
depth:
|
||||||
|
description: Depth tells Traefik to use the X-Forwarded-For
|
||||||
|
header and take the IP located at the depth position
|
||||||
|
(starting from the right).
|
||||||
|
type: integer
|
||||||
|
excludedIPs:
|
||||||
|
description: ExcludedIPs configures Traefik to scan the
|
||||||
|
X-Forwarded-For header and select the first IP not in
|
||||||
|
the list.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
type: object
|
||||||
|
requestHeaderName:
|
||||||
|
description: RequestHeaderName defines the name of the header
|
||||||
|
used to group incoming requests.
|
||||||
|
type: string
|
||||||
|
requestHost:
|
||||||
|
description: RequestHost defines whether to consider the request
|
||||||
|
Host as the source.
|
||||||
|
type: boolean
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
redirectRegex:
|
||||||
|
description: |-
|
||||||
|
RedirectRegex holds the redirect regex middleware configuration.
|
||||||
|
This middleware redirects a request using regex matching and replacement.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/redirectregex/#regex
|
||||||
|
properties:
|
||||||
|
permanent:
|
||||||
|
description: Permanent defines whether the redirection is permanent
|
||||||
|
(301).
|
||||||
|
type: boolean
|
||||||
|
regex:
|
||||||
|
description: Regex defines the regex used to match and capture
|
||||||
|
elements from the request URL.
|
||||||
|
type: string
|
||||||
|
replacement:
|
||||||
|
description: Replacement defines how to modify the URL to have
|
||||||
|
the new target URL.
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
redirectScheme:
|
||||||
|
description: |-
|
||||||
|
RedirectScheme holds the redirect scheme middleware configuration.
|
||||||
|
This middleware redirects requests from a scheme/port to another.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/redirectscheme/
|
||||||
|
properties:
|
||||||
|
permanent:
|
||||||
|
description: Permanent defines whether the redirection is permanent
|
||||||
|
(301).
|
||||||
|
type: boolean
|
||||||
|
port:
|
||||||
|
description: Port defines the port of the new URL.
|
||||||
|
type: string
|
||||||
|
scheme:
|
||||||
|
description: Scheme defines the scheme of the new URL.
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
replacePath:
|
||||||
|
description: |-
|
||||||
|
ReplacePath holds the replace path middleware configuration.
|
||||||
|
This middleware replaces the path of the request URL and store the original path in an X-Replaced-Path header.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/replacepath/
|
||||||
|
properties:
|
||||||
|
path:
|
||||||
|
description: Path defines the path to use as replacement in the
|
||||||
|
request URL.
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
replacePathRegex:
|
||||||
|
description: |-
|
||||||
|
ReplacePathRegex holds the replace path regex middleware configuration.
|
||||||
|
This middleware replaces the path of a URL using regex matching and replacement.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/replacepathregex/
|
||||||
|
properties:
|
||||||
|
regex:
|
||||||
|
description: Regex defines the regular expression used to match
|
||||||
|
and capture the path from the request URL.
|
||||||
|
type: string
|
||||||
|
replacement:
|
||||||
|
description: Replacement defines the replacement path format,
|
||||||
|
which can include captured variables.
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
retry:
|
||||||
|
description: |-
|
||||||
|
Retry holds the retry middleware configuration.
|
||||||
|
This middleware reissues requests a given number of times to a backend server if that server does not reply.
|
||||||
|
As soon as the server answers, the middleware stops retrying, regardless of the response status.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/retry/
|
||||||
|
properties:
|
||||||
|
attempts:
|
||||||
|
description: Attempts defines how many times the request should
|
||||||
|
be retried.
|
||||||
|
type: integer
|
||||||
|
initialInterval:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
InitialInterval defines the first wait time in the exponential backoff series.
|
||||||
|
The maximum interval is calculated as twice the initialInterval.
|
||||||
|
If unspecified, requests will be retried immediately.
|
||||||
|
The value of initialInterval should be provided in seconds or as a valid duration format,
|
||||||
|
see https://pkg.go.dev/time#ParseDuration.
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
type: object
|
||||||
|
stripPrefix:
|
||||||
|
description: |-
|
||||||
|
StripPrefix holds the strip prefix middleware configuration.
|
||||||
|
This middleware removes the specified prefixes from the URL path.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/stripprefix/
|
||||||
|
properties:
|
||||||
|
forceSlash:
|
||||||
|
description: |-
|
||||||
|
ForceSlash ensures that the resulting stripped path is not the empty string, by replacing it with / when necessary.
|
||||||
|
Default: true.
|
||||||
|
type: boolean
|
||||||
|
prefixes:
|
||||||
|
description: Prefixes defines the prefixes to strip from the request
|
||||||
|
URL.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
type: object
|
||||||
|
stripPrefixRegex:
|
||||||
|
description: |-
|
||||||
|
StripPrefixRegex holds the strip prefix regex middleware configuration.
|
||||||
|
This middleware removes the matching prefixes from the URL path.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/http/stripprefixregex/
|
||||||
|
properties:
|
||||||
|
regex:
|
||||||
|
description: Regex defines the regular expression to match the
|
||||||
|
path prefix from the request URL.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- metadata
|
||||||
|
- spec
|
||||||
|
type: object
|
||||||
|
served: true
|
||||||
|
storage: true
|
|
@ -0,0 +1,87 @@
|
||||||
|
---
|
||||||
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
|
kind: CustomResourceDefinition
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
controller-gen.kubebuilder.io/version: v0.14.0
|
||||||
|
name: middlewaretcps.traefik.io
|
||||||
|
spec:
|
||||||
|
group: traefik.io
|
||||||
|
names:
|
||||||
|
kind: MiddlewareTCP
|
||||||
|
listKind: MiddlewareTCPList
|
||||||
|
plural: middlewaretcps
|
||||||
|
singular: middlewaretcp
|
||||||
|
scope: Namespaced
|
||||||
|
versions:
|
||||||
|
- name: v1alpha1
|
||||||
|
schema:
|
||||||
|
openAPIV3Schema:
|
||||||
|
description: |-
|
||||||
|
MiddlewareTCP is the CRD implementation of a Traefik TCP middleware.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/overview/
|
||||||
|
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: MiddlewareTCPSpec defines the desired state of a MiddlewareTCP.
|
||||||
|
properties:
|
||||||
|
inFlightConn:
|
||||||
|
description: InFlightConn defines the InFlightConn middleware configuration.
|
||||||
|
properties:
|
||||||
|
amount:
|
||||||
|
description: |-
|
||||||
|
Amount defines the maximum amount of allowed simultaneous connections.
|
||||||
|
The middleware closes the connection if there are already amount connections opened.
|
||||||
|
format: int64
|
||||||
|
type: integer
|
||||||
|
type: object
|
||||||
|
ipAllowList:
|
||||||
|
description: |-
|
||||||
|
IPAllowList defines the IPAllowList middleware configuration.
|
||||||
|
This middleware accepts/refuses connections based on the client IP.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/tcp/ipallowlist/
|
||||||
|
properties:
|
||||||
|
sourceRange:
|
||||||
|
description: SourceRange defines the allowed IPs (or ranges of
|
||||||
|
allowed IPs by using CIDR notation).
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
type: object
|
||||||
|
ipWhiteList:
|
||||||
|
description: |-
|
||||||
|
IPWhiteList defines the IPWhiteList middleware configuration.
|
||||||
|
This middleware accepts/refuses connections based on the client IP.
|
||||||
|
Deprecated: please use IPAllowList instead.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/middlewares/tcp/ipwhitelist/
|
||||||
|
properties:
|
||||||
|
sourceRange:
|
||||||
|
description: SourceRange defines the allowed IPs (or ranges of
|
||||||
|
allowed IPs by using CIDR notation).
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- metadata
|
||||||
|
- spec
|
||||||
|
type: object
|
||||||
|
served: true
|
||||||
|
storage: true
|
|
@ -0,0 +1,126 @@
|
||||||
|
---
|
||||||
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
|
kind: CustomResourceDefinition
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
controller-gen.kubebuilder.io/version: v0.14.0
|
||||||
|
name: serverstransports.traefik.io
|
||||||
|
spec:
|
||||||
|
group: traefik.io
|
||||||
|
names:
|
||||||
|
kind: ServersTransport
|
||||||
|
listKind: ServersTransportList
|
||||||
|
plural: serverstransports
|
||||||
|
singular: serverstransport
|
||||||
|
scope: Namespaced
|
||||||
|
versions:
|
||||||
|
- name: v1alpha1
|
||||||
|
schema:
|
||||||
|
openAPIV3Schema:
|
||||||
|
description: |-
|
||||||
|
ServersTransport is the CRD implementation of a ServersTransport.
|
||||||
|
If no serversTransport is specified, the default@internal will be used.
|
||||||
|
The default@internal serversTransport is created from the static configuration.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/services/#serverstransport_1
|
||||||
|
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: ServersTransportSpec defines the desired state of a ServersTransport.
|
||||||
|
properties:
|
||||||
|
certificatesSecrets:
|
||||||
|
description: CertificatesSecrets defines a list of secret storing
|
||||||
|
client certificates for mTLS.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
disableHTTP2:
|
||||||
|
description: DisableHTTP2 disables HTTP/2 for connections with backend
|
||||||
|
servers.
|
||||||
|
type: boolean
|
||||||
|
forwardingTimeouts:
|
||||||
|
description: ForwardingTimeouts defines the timeouts for requests
|
||||||
|
forwarded to the backend servers.
|
||||||
|
properties:
|
||||||
|
dialTimeout:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: DialTimeout is the amount of time to wait until a
|
||||||
|
connection to a backend server can be established.
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
idleConnTimeout:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: IdleConnTimeout is the maximum period for which an
|
||||||
|
idle HTTP keep-alive connection will remain open before closing
|
||||||
|
itself.
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
pingTimeout:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: PingTimeout is the timeout after which the HTTP/2
|
||||||
|
connection will be closed if a response to ping is not received.
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
readIdleTimeout:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: ReadIdleTimeout is the timeout after which a health
|
||||||
|
check using ping frame will be carried out if no frame is received
|
||||||
|
on the HTTP/2 connection.
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
responseHeaderTimeout:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: ResponseHeaderTimeout is the amount of time to wait
|
||||||
|
for a server's response headers after fully writing the request
|
||||||
|
(including its body, if any).
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
type: object
|
||||||
|
insecureSkipVerify:
|
||||||
|
description: InsecureSkipVerify disables SSL certificate verification.
|
||||||
|
type: boolean
|
||||||
|
maxIdleConnsPerHost:
|
||||||
|
description: MaxIdleConnsPerHost controls the maximum idle (keep-alive)
|
||||||
|
to keep per-host.
|
||||||
|
type: integer
|
||||||
|
peerCertURI:
|
||||||
|
description: PeerCertURI defines the peer cert URI used to match against
|
||||||
|
SAN URI during the peer certificate verification.
|
||||||
|
type: string
|
||||||
|
rootCAsSecrets:
|
||||||
|
description: RootCAsSecrets defines a list of CA secret used to validate
|
||||||
|
self-signed certificate.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
serverName:
|
||||||
|
description: ServerName defines the server name used to contact the
|
||||||
|
server.
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- metadata
|
||||||
|
- spec
|
||||||
|
type: object
|
||||||
|
served: true
|
||||||
|
storage: true
|
|
@ -0,0 +1,120 @@
|
||||||
|
---
|
||||||
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
|
kind: CustomResourceDefinition
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
controller-gen.kubebuilder.io/version: v0.14.0
|
||||||
|
name: serverstransporttcps.traefik.io
|
||||||
|
spec:
|
||||||
|
group: traefik.io
|
||||||
|
names:
|
||||||
|
kind: ServersTransportTCP
|
||||||
|
listKind: ServersTransportTCPList
|
||||||
|
plural: serverstransporttcps
|
||||||
|
singular: serverstransporttcp
|
||||||
|
scope: Namespaced
|
||||||
|
versions:
|
||||||
|
- name: v1alpha1
|
||||||
|
schema:
|
||||||
|
openAPIV3Schema:
|
||||||
|
description: |-
|
||||||
|
ServersTransportTCP is the CRD implementation of a TCPServersTransport.
|
||||||
|
If no tcpServersTransport is specified, a default one named default@internal will be used.
|
||||||
|
The default@internal tcpServersTransport can be configured in the static configuration.
|
||||||
|
More info: https://doc.traefik.io/traefik/v3.0/routing/services/#serverstransport_3
|
||||||
|
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: ServersTransportTCPSpec defines the desired state of a ServersTransportTCP.
|
||||||
|
properties:
|
||||||
|
dialKeepAlive:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: DialKeepAlive is the interval between keep-alive probes
|
||||||
|
for an active network connection. If zero, keep-alive probes are
|
||||||
|
sent with a default value (currently 15 seconds), if supported by
|
||||||
|
the protocol and operating system. Network protocols or operating
|
||||||
|
systems that do not support keep-alives ignore this field. If negative,
|
||||||
|
keep-alive probes are disabled.
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
dialTimeout:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: DialTimeout is the amount of time to wait until a connection
|
||||||
|
to a backend server can be established.
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
terminationDelay:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: TerminationDelay defines the delay to wait before fully
|
||||||
|
terminating the connection, after one connected peer has closed
|
||||||
|
its writing capability.
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
tls:
|
||||||
|
description: TLS defines the TLS configuration
|
||||||
|
properties:
|
||||||
|
certificatesSecrets:
|
||||||
|
description: CertificatesSecrets defines a list of secret storing
|
||||||
|
client certificates for mTLS.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
insecureSkipVerify:
|
||||||
|
description: InsecureSkipVerify disables TLS certificate verification.
|
||||||
|
type: boolean
|
||||||
|
peerCertURI:
|
||||||
|
description: |-
|
||||||
|
MaxIdleConnsPerHost controls the maximum idle (keep-alive) to keep per-host.
|
||||||
|
PeerCertURI defines the peer cert URI used to match against SAN URI during the peer certificate verification.
|
||||||
|
type: string
|
||||||
|
rootCAsSecrets:
|
||||||
|
description: RootCAsSecrets defines a list of CA secret used to
|
||||||
|
validate self-signed certificates.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
serverName:
|
||||||
|
description: ServerName defines the server name used to contact
|
||||||
|
the server.
|
||||||
|
type: string
|
||||||
|
spiffe:
|
||||||
|
description: Spiffe defines the SPIFFE configuration.
|
||||||
|
properties:
|
||||||
|
ids:
|
||||||
|
description: IDs defines the allowed SPIFFE IDs (takes precedence
|
||||||
|
over the SPIFFE TrustDomain).
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
trustDomain:
|
||||||
|
description: TrustDomain defines the allowed SPIFFE trust
|
||||||
|
domain.
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- metadata
|
||||||
|
- spec
|
||||||
|
type: object
|
||||||
|
served: true
|
||||||
|
storage: true
|
114
traefik/base/charts/traefik/crds/traefik.io_tlsoptions.yaml
Normal file
114
traefik/base/charts/traefik/crds/traefik.io_tlsoptions.yaml
Normal file
|
@ -0,0 +1,114 @@
|
||||||
|
---
|
||||||
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
|
kind: CustomResourceDefinition
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
controller-gen.kubebuilder.io/version: v0.14.0
|
||||||
|
name: tlsoptions.traefik.io
|
||||||
|
spec:
|
||||||
|
group: traefik.io
|
||||||
|
names:
|
||||||
|
kind: TLSOption
|
||||||
|
listKind: TLSOptionList
|
||||||
|
plural: tlsoptions
|
||||||
|
singular: tlsoption
|
||||||
|
scope: Namespaced
|
||||||
|
versions:
|
||||||
|
- name: v1alpha1
|
||||||
|
schema:
|
||||||
|
openAPIV3Schema:
|
||||||
|
description: |-
|
||||||
|
TLSOption is the CRD implementation of a Traefik TLS Option, allowing to configure some parameters of the TLS connection.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/https/tls/#tls-options
|
||||||
|
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: TLSOptionSpec defines the desired state of a TLSOption.
|
||||||
|
properties:
|
||||||
|
alpnProtocols:
|
||||||
|
description: |-
|
||||||
|
ALPNProtocols defines the list of supported application level protocols for the TLS handshake, in order of preference.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/https/tls/#alpn-protocols
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
cipherSuites:
|
||||||
|
description: |-
|
||||||
|
CipherSuites defines the list of supported cipher suites for TLS versions up to TLS 1.2.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/https/tls/#cipher-suites
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
clientAuth:
|
||||||
|
description: ClientAuth defines the server's policy for TLS Client
|
||||||
|
Authentication.
|
||||||
|
properties:
|
||||||
|
clientAuthType:
|
||||||
|
description: ClientAuthType defines the client authentication
|
||||||
|
type to apply.
|
||||||
|
enum:
|
||||||
|
- NoClientCert
|
||||||
|
- RequestClientCert
|
||||||
|
- RequireAnyClientCert
|
||||||
|
- VerifyClientCertIfGiven
|
||||||
|
- RequireAndVerifyClientCert
|
||||||
|
type: string
|
||||||
|
secretNames:
|
||||||
|
description: SecretNames defines the names of the referenced Kubernetes
|
||||||
|
Secret storing certificate details.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
type: object
|
||||||
|
curvePreferences:
|
||||||
|
description: |-
|
||||||
|
CurvePreferences defines the preferred elliptic curves in a specific order.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/https/tls/#curve-preferences
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
maxVersion:
|
||||||
|
description: |-
|
||||||
|
MaxVersion defines the maximum TLS version that Traefik will accept.
|
||||||
|
Possible values: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13.
|
||||||
|
Default: None.
|
||||||
|
type: string
|
||||||
|
minVersion:
|
||||||
|
description: |-
|
||||||
|
MinVersion defines the minimum TLS version that Traefik will accept.
|
||||||
|
Possible values: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13.
|
||||||
|
Default: VersionTLS10.
|
||||||
|
type: string
|
||||||
|
preferServerCipherSuites:
|
||||||
|
description: |-
|
||||||
|
PreferServerCipherSuites defines whether the server chooses a cipher suite among his own instead of among the client's.
|
||||||
|
It is enabled automatically when minVersion or maxVersion is set.
|
||||||
|
Deprecated: https://github.com/golang/go/issues/45430
|
||||||
|
type: boolean
|
||||||
|
sniStrict:
|
||||||
|
description: SniStrict defines whether Traefik allows connections
|
||||||
|
from clients connections that do not specify a server_name extension.
|
||||||
|
type: boolean
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- metadata
|
||||||
|
- spec
|
||||||
|
type: object
|
||||||
|
served: true
|
||||||
|
storage: true
|
97
traefik/base/charts/traefik/crds/traefik.io_tlsstores.yaml
Normal file
97
traefik/base/charts/traefik/crds/traefik.io_tlsstores.yaml
Normal file
|
@ -0,0 +1,97 @@
|
||||||
|
---
|
||||||
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
|
kind: CustomResourceDefinition
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
controller-gen.kubebuilder.io/version: v0.14.0
|
||||||
|
name: tlsstores.traefik.io
|
||||||
|
spec:
|
||||||
|
group: traefik.io
|
||||||
|
names:
|
||||||
|
kind: TLSStore
|
||||||
|
listKind: TLSStoreList
|
||||||
|
plural: tlsstores
|
||||||
|
singular: tlsstore
|
||||||
|
scope: Namespaced
|
||||||
|
versions:
|
||||||
|
- name: v1alpha1
|
||||||
|
schema:
|
||||||
|
openAPIV3Schema:
|
||||||
|
description: |-
|
||||||
|
TLSStore is the CRD implementation of a Traefik TLS Store.
|
||||||
|
For the time being, only the TLSStore named default is supported.
|
||||||
|
This means that you cannot have two stores that are named default in different Kubernetes namespaces.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/https/tls/#certificates-stores
|
||||||
|
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: TLSStoreSpec defines the desired state of a TLSStore.
|
||||||
|
properties:
|
||||||
|
certificates:
|
||||||
|
description: Certificates is a list of secret names, each secret holding
|
||||||
|
a key/certificate pair to add to the store.
|
||||||
|
items:
|
||||||
|
description: Certificate holds a secret name for the TLSStore resource.
|
||||||
|
properties:
|
||||||
|
secretName:
|
||||||
|
description: SecretName is the name of the referenced Kubernetes
|
||||||
|
Secret to specify the certificate details.
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- secretName
|
||||||
|
type: object
|
||||||
|
type: array
|
||||||
|
defaultCertificate:
|
||||||
|
description: DefaultCertificate defines the default certificate configuration.
|
||||||
|
properties:
|
||||||
|
secretName:
|
||||||
|
description: SecretName is the name of the referenced Kubernetes
|
||||||
|
Secret to specify the certificate details.
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- secretName
|
||||||
|
type: object
|
||||||
|
defaultGeneratedCert:
|
||||||
|
description: DefaultGeneratedCert defines the default generated certificate
|
||||||
|
configuration.
|
||||||
|
properties:
|
||||||
|
domain:
|
||||||
|
description: Domain is the domain definition for the DefaultCertificate.
|
||||||
|
properties:
|
||||||
|
main:
|
||||||
|
description: Main defines the main domain name.
|
||||||
|
type: string
|
||||||
|
sans:
|
||||||
|
description: SANs defines the subject alternative domain names.
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
type: array
|
||||||
|
type: object
|
||||||
|
resolver:
|
||||||
|
description: Resolver is the name of the resolver that will be
|
||||||
|
used to issue the DefaultCertificate.
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- metadata
|
||||||
|
- spec
|
||||||
|
type: object
|
||||||
|
served: true
|
||||||
|
storage: true
|
411
traefik/base/charts/traefik/crds/traefik.io_traefikservices.yaml
Normal file
411
traefik/base/charts/traefik/crds/traefik.io_traefikservices.yaml
Normal file
|
@ -0,0 +1,411 @@
|
||||||
|
---
|
||||||
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
|
kind: CustomResourceDefinition
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
controller-gen.kubebuilder.io/version: v0.14.0
|
||||||
|
name: traefikservices.traefik.io
|
||||||
|
spec:
|
||||||
|
group: traefik.io
|
||||||
|
names:
|
||||||
|
kind: TraefikService
|
||||||
|
listKind: TraefikServiceList
|
||||||
|
plural: traefikservices
|
||||||
|
singular: traefikservice
|
||||||
|
scope: Namespaced
|
||||||
|
versions:
|
||||||
|
- name: v1alpha1
|
||||||
|
schema:
|
||||||
|
openAPIV3Schema:
|
||||||
|
description: |-
|
||||||
|
TraefikService is the CRD implementation of a Traefik Service.
|
||||||
|
TraefikService object allows to:
|
||||||
|
- Apply weight to Services on load-balancing
|
||||||
|
- Mirror traffic on services
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/providers/kubernetes-crd/#kind-traefikservice
|
||||||
|
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: TraefikServiceSpec defines the desired state of a TraefikService.
|
||||||
|
properties:
|
||||||
|
mirroring:
|
||||||
|
description: Mirroring defines the Mirroring service configuration.
|
||||||
|
properties:
|
||||||
|
kind:
|
||||||
|
description: Kind defines the kind of the Service.
|
||||||
|
enum:
|
||||||
|
- Service
|
||||||
|
- TraefikService
|
||||||
|
type: string
|
||||||
|
maxBodySize:
|
||||||
|
description: |-
|
||||||
|
MaxBodySize defines the maximum size allowed for the body of the request.
|
||||||
|
If the body is larger, the request is not mirrored.
|
||||||
|
Default value is -1, which means unlimited size.
|
||||||
|
format: int64
|
||||||
|
type: integer
|
||||||
|
mirrors:
|
||||||
|
description: Mirrors defines the list of mirrors where Traefik
|
||||||
|
will duplicate the traffic.
|
||||||
|
items:
|
||||||
|
description: MirrorService holds the mirror configuration.
|
||||||
|
properties:
|
||||||
|
kind:
|
||||||
|
description: Kind defines the kind of the Service.
|
||||||
|
enum:
|
||||||
|
- Service
|
||||||
|
- TraefikService
|
||||||
|
type: string
|
||||||
|
name:
|
||||||
|
description: |-
|
||||||
|
Name defines the name of the referenced Kubernetes Service or TraefikService.
|
||||||
|
The differentiation between the two is specified in the Kind field.
|
||||||
|
type: string
|
||||||
|
namespace:
|
||||||
|
description: Namespace defines the namespace of the referenced
|
||||||
|
Kubernetes Service or TraefikService.
|
||||||
|
type: string
|
||||||
|
nativeLB:
|
||||||
|
description: |-
|
||||||
|
NativeLB controls, when creating the load-balancer,
|
||||||
|
whether the LB's children are directly the pods IPs or if the only child is the Kubernetes Service clusterIP.
|
||||||
|
The Kubernetes Service itself does load-balance to the pods.
|
||||||
|
By default, NativeLB is false.
|
||||||
|
type: boolean
|
||||||
|
passHostHeader:
|
||||||
|
description: |-
|
||||||
|
PassHostHeader defines whether the client Host header is forwarded to the upstream Kubernetes Service.
|
||||||
|
By default, passHostHeader is true.
|
||||||
|
type: boolean
|
||||||
|
percent:
|
||||||
|
description: |-
|
||||||
|
Percent defines the part of the traffic to mirror.
|
||||||
|
Supported values: 0 to 100.
|
||||||
|
type: integer
|
||||||
|
port:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Port defines the port of a Kubernetes Service.
|
||||||
|
This can be a reference to a named port.
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
responseForwarding:
|
||||||
|
description: ResponseForwarding defines how Traefik forwards
|
||||||
|
the response from the upstream Kubernetes Service to the
|
||||||
|
client.
|
||||||
|
properties:
|
||||||
|
flushInterval:
|
||||||
|
description: |-
|
||||||
|
FlushInterval defines the interval, in milliseconds, in between flushes to the client while copying the response body.
|
||||||
|
A negative value means to flush immediately after each write to the client.
|
||||||
|
This configuration is ignored when ReverseProxy recognizes a response as a streaming response;
|
||||||
|
for such responses, writes are flushed to the client immediately.
|
||||||
|
Default: 100ms
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
scheme:
|
||||||
|
description: |-
|
||||||
|
Scheme defines the scheme to use for the request to the upstream Kubernetes Service.
|
||||||
|
It defaults to https when Kubernetes Service port is 443, http otherwise.
|
||||||
|
type: string
|
||||||
|
serversTransport:
|
||||||
|
description: |-
|
||||||
|
ServersTransport defines the name of ServersTransport resource to use.
|
||||||
|
It allows to configure the transport between Traefik and your servers.
|
||||||
|
Can only be used on a Kubernetes Service.
|
||||||
|
type: string
|
||||||
|
sticky:
|
||||||
|
description: |-
|
||||||
|
Sticky defines the sticky sessions configuration.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/services/#sticky-sessions
|
||||||
|
properties:
|
||||||
|
cookie:
|
||||||
|
description: Cookie defines the sticky cookie configuration.
|
||||||
|
properties:
|
||||||
|
httpOnly:
|
||||||
|
description: HTTPOnly defines whether the cookie
|
||||||
|
can be accessed by client-side APIs, such as JavaScript.
|
||||||
|
type: boolean
|
||||||
|
name:
|
||||||
|
description: Name defines the Cookie name.
|
||||||
|
type: string
|
||||||
|
sameSite:
|
||||||
|
description: |-
|
||||||
|
SameSite defines the same site policy.
|
||||||
|
More info: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite
|
||||||
|
type: string
|
||||||
|
secure:
|
||||||
|
description: Secure defines whether the cookie can
|
||||||
|
only be transmitted over an encrypted connection
|
||||||
|
(i.e. HTTPS).
|
||||||
|
type: boolean
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
strategy:
|
||||||
|
description: |-
|
||||||
|
Strategy defines the load balancing strategy between the servers.
|
||||||
|
RoundRobin is the only supported value at the moment.
|
||||||
|
type: string
|
||||||
|
weight:
|
||||||
|
description: |-
|
||||||
|
Weight defines the weight and should only be specified when Name references a TraefikService object
|
||||||
|
(and to be precise, one that embeds a Weighted Round Robin).
|
||||||
|
type: integer
|
||||||
|
required:
|
||||||
|
- name
|
||||||
|
type: object
|
||||||
|
type: array
|
||||||
|
name:
|
||||||
|
description: |-
|
||||||
|
Name defines the name of the referenced Kubernetes Service or TraefikService.
|
||||||
|
The differentiation between the two is specified in the Kind field.
|
||||||
|
type: string
|
||||||
|
namespace:
|
||||||
|
description: Namespace defines the namespace of the referenced
|
||||||
|
Kubernetes Service or TraefikService.
|
||||||
|
type: string
|
||||||
|
nativeLB:
|
||||||
|
description: |-
|
||||||
|
NativeLB controls, when creating the load-balancer,
|
||||||
|
whether the LB's children are directly the pods IPs or if the only child is the Kubernetes Service clusterIP.
|
||||||
|
The Kubernetes Service itself does load-balance to the pods.
|
||||||
|
By default, NativeLB is false.
|
||||||
|
type: boolean
|
||||||
|
passHostHeader:
|
||||||
|
description: |-
|
||||||
|
PassHostHeader defines whether the client Host header is forwarded to the upstream Kubernetes Service.
|
||||||
|
By default, passHostHeader is true.
|
||||||
|
type: boolean
|
||||||
|
port:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Port defines the port of a Kubernetes Service.
|
||||||
|
This can be a reference to a named port.
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
responseForwarding:
|
||||||
|
description: ResponseForwarding defines how Traefik forwards the
|
||||||
|
response from the upstream Kubernetes Service to the client.
|
||||||
|
properties:
|
||||||
|
flushInterval:
|
||||||
|
description: |-
|
||||||
|
FlushInterval defines the interval, in milliseconds, in between flushes to the client while copying the response body.
|
||||||
|
A negative value means to flush immediately after each write to the client.
|
||||||
|
This configuration is ignored when ReverseProxy recognizes a response as a streaming response;
|
||||||
|
for such responses, writes are flushed to the client immediately.
|
||||||
|
Default: 100ms
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
scheme:
|
||||||
|
description: |-
|
||||||
|
Scheme defines the scheme to use for the request to the upstream Kubernetes Service.
|
||||||
|
It defaults to https when Kubernetes Service port is 443, http otherwise.
|
||||||
|
type: string
|
||||||
|
serversTransport:
|
||||||
|
description: |-
|
||||||
|
ServersTransport defines the name of ServersTransport resource to use.
|
||||||
|
It allows to configure the transport between Traefik and your servers.
|
||||||
|
Can only be used on a Kubernetes Service.
|
||||||
|
type: string
|
||||||
|
sticky:
|
||||||
|
description: |-
|
||||||
|
Sticky defines the sticky sessions configuration.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/services/#sticky-sessions
|
||||||
|
properties:
|
||||||
|
cookie:
|
||||||
|
description: Cookie defines the sticky cookie configuration.
|
||||||
|
properties:
|
||||||
|
httpOnly:
|
||||||
|
description: HTTPOnly defines whether the cookie can be
|
||||||
|
accessed by client-side APIs, such as JavaScript.
|
||||||
|
type: boolean
|
||||||
|
name:
|
||||||
|
description: Name defines the Cookie name.
|
||||||
|
type: string
|
||||||
|
sameSite:
|
||||||
|
description: |-
|
||||||
|
SameSite defines the same site policy.
|
||||||
|
More info: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite
|
||||||
|
type: string
|
||||||
|
secure:
|
||||||
|
description: Secure defines whether the cookie can only
|
||||||
|
be transmitted over an encrypted connection (i.e. HTTPS).
|
||||||
|
type: boolean
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
strategy:
|
||||||
|
description: |-
|
||||||
|
Strategy defines the load balancing strategy between the servers.
|
||||||
|
RoundRobin is the only supported value at the moment.
|
||||||
|
type: string
|
||||||
|
weight:
|
||||||
|
description: |-
|
||||||
|
Weight defines the weight and should only be specified when Name references a TraefikService object
|
||||||
|
(and to be precise, one that embeds a Weighted Round Robin).
|
||||||
|
type: integer
|
||||||
|
required:
|
||||||
|
- name
|
||||||
|
type: object
|
||||||
|
weighted:
|
||||||
|
description: Weighted defines the Weighted Round Robin configuration.
|
||||||
|
properties:
|
||||||
|
services:
|
||||||
|
description: Services defines the list of Kubernetes Service and/or
|
||||||
|
TraefikService to load-balance, with weight.
|
||||||
|
items:
|
||||||
|
description: Service defines an upstream HTTP service to proxy
|
||||||
|
traffic to.
|
||||||
|
properties:
|
||||||
|
kind:
|
||||||
|
description: Kind defines the kind of the Service.
|
||||||
|
enum:
|
||||||
|
- Service
|
||||||
|
- TraefikService
|
||||||
|
type: string
|
||||||
|
name:
|
||||||
|
description: |-
|
||||||
|
Name defines the name of the referenced Kubernetes Service or TraefikService.
|
||||||
|
The differentiation between the two is specified in the Kind field.
|
||||||
|
type: string
|
||||||
|
namespace:
|
||||||
|
description: Namespace defines the namespace of the referenced
|
||||||
|
Kubernetes Service or TraefikService.
|
||||||
|
type: string
|
||||||
|
nativeLB:
|
||||||
|
description: |-
|
||||||
|
NativeLB controls, when creating the load-balancer,
|
||||||
|
whether the LB's children are directly the pods IPs or if the only child is the Kubernetes Service clusterIP.
|
||||||
|
The Kubernetes Service itself does load-balance to the pods.
|
||||||
|
By default, NativeLB is false.
|
||||||
|
type: boolean
|
||||||
|
passHostHeader:
|
||||||
|
description: |-
|
||||||
|
PassHostHeader defines whether the client Host header is forwarded to the upstream Kubernetes Service.
|
||||||
|
By default, passHostHeader is true.
|
||||||
|
type: boolean
|
||||||
|
port:
|
||||||
|
anyOf:
|
||||||
|
- type: integer
|
||||||
|
- type: string
|
||||||
|
description: |-
|
||||||
|
Port defines the port of a Kubernetes Service.
|
||||||
|
This can be a reference to a named port.
|
||||||
|
x-kubernetes-int-or-string: true
|
||||||
|
responseForwarding:
|
||||||
|
description: ResponseForwarding defines how Traefik forwards
|
||||||
|
the response from the upstream Kubernetes Service to the
|
||||||
|
client.
|
||||||
|
properties:
|
||||||
|
flushInterval:
|
||||||
|
description: |-
|
||||||
|
FlushInterval defines the interval, in milliseconds, in between flushes to the client while copying the response body.
|
||||||
|
A negative value means to flush immediately after each write to the client.
|
||||||
|
This configuration is ignored when ReverseProxy recognizes a response as a streaming response;
|
||||||
|
for such responses, writes are flushed to the client immediately.
|
||||||
|
Default: 100ms
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
scheme:
|
||||||
|
description: |-
|
||||||
|
Scheme defines the scheme to use for the request to the upstream Kubernetes Service.
|
||||||
|
It defaults to https when Kubernetes Service port is 443, http otherwise.
|
||||||
|
type: string
|
||||||
|
serversTransport:
|
||||||
|
description: |-
|
||||||
|
ServersTransport defines the name of ServersTransport resource to use.
|
||||||
|
It allows to configure the transport between Traefik and your servers.
|
||||||
|
Can only be used on a Kubernetes Service.
|
||||||
|
type: string
|
||||||
|
sticky:
|
||||||
|
description: |-
|
||||||
|
Sticky defines the sticky sessions configuration.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/services/#sticky-sessions
|
||||||
|
properties:
|
||||||
|
cookie:
|
||||||
|
description: Cookie defines the sticky cookie configuration.
|
||||||
|
properties:
|
||||||
|
httpOnly:
|
||||||
|
description: HTTPOnly defines whether the cookie
|
||||||
|
can be accessed by client-side APIs, such as JavaScript.
|
||||||
|
type: boolean
|
||||||
|
name:
|
||||||
|
description: Name defines the Cookie name.
|
||||||
|
type: string
|
||||||
|
sameSite:
|
||||||
|
description: |-
|
||||||
|
SameSite defines the same site policy.
|
||||||
|
More info: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite
|
||||||
|
type: string
|
||||||
|
secure:
|
||||||
|
description: Secure defines whether the cookie can
|
||||||
|
only be transmitted over an encrypted connection
|
||||||
|
(i.e. HTTPS).
|
||||||
|
type: boolean
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
strategy:
|
||||||
|
description: |-
|
||||||
|
Strategy defines the load balancing strategy between the servers.
|
||||||
|
RoundRobin is the only supported value at the moment.
|
||||||
|
type: string
|
||||||
|
weight:
|
||||||
|
description: |-
|
||||||
|
Weight defines the weight and should only be specified when Name references a TraefikService object
|
||||||
|
(and to be precise, one that embeds a Weighted Round Robin).
|
||||||
|
type: integer
|
||||||
|
required:
|
||||||
|
- name
|
||||||
|
type: object
|
||||||
|
type: array
|
||||||
|
sticky:
|
||||||
|
description: |-
|
||||||
|
Sticky defines whether sticky sessions are enabled.
|
||||||
|
More info: https://doc.traefik.io/traefik/v2.11/routing/providers/kubernetes-crd/#stickiness-and-load-balancing
|
||||||
|
properties:
|
||||||
|
cookie:
|
||||||
|
description: Cookie defines the sticky cookie configuration.
|
||||||
|
properties:
|
||||||
|
httpOnly:
|
||||||
|
description: HTTPOnly defines whether the cookie can be
|
||||||
|
accessed by client-side APIs, such as JavaScript.
|
||||||
|
type: boolean
|
||||||
|
name:
|
||||||
|
description: Name defines the Cookie name.
|
||||||
|
type: string
|
||||||
|
sameSite:
|
||||||
|
description: |-
|
||||||
|
SameSite defines the same site policy.
|
||||||
|
More info: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite
|
||||||
|
type: string
|
||||||
|
secure:
|
||||||
|
description: Secure defines whether the cookie can only
|
||||||
|
be transmitted over an encrypted connection (i.e. HTTPS).
|
||||||
|
type: boolean
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- metadata
|
||||||
|
- spec
|
||||||
|
type: object
|
||||||
|
served: true
|
||||||
|
storage: true
|
36
traefik/base/charts/traefik/templates/NOTES.txt
Normal file
36
traefik/base/charts/traefik/templates/NOTES.txt
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
|
||||||
|
|
||||||
|
Traefik Proxy {{ .Values.image.tag | default .Chart.AppVersion }} has been deployed successfully on {{ template "traefik.namespace" . }} namespace !
|
||||||
|
|
||||||
|
{{- if .Values.persistence }}
|
||||||
|
{{- if and .Values.persistence.enabled (empty .Values.deployment.initContainer)}}
|
||||||
|
|
||||||
|
🚨 When enabling persistence for certificates, permissions on acme.json can be
|
||||||
|
lost when Traefik restarts. You can ensure correct permissions with an
|
||||||
|
initContainer. See https://github.com/traefik/traefik-helm-chart/issues/396 for
|
||||||
|
more info. 🚨
|
||||||
|
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.providers.kubernetesCRD.labelSelector }}
|
||||||
|
{{- $labelsApplied := include "traefik.labels" $ }}
|
||||||
|
{{- $labelSelectors := regexSplit "," . -1 }}
|
||||||
|
{{- range $labelSelectors }}
|
||||||
|
{{- $labelSelectorRaw := regexSplit "=" . -1 }}
|
||||||
|
{{- $labelSelector := printf "%s: %s" (first $labelSelectorRaw) (last $labelSelectorRaw) }}
|
||||||
|
{{- if not (contains $labelSelector $labelsApplied) }}
|
||||||
|
🚨 Resources populated with this chart don't match with labelSelector `{{.}}` applied on kubernetesCRD provider 🚨
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.providers.kubernetesIngress.labelSelector }}
|
||||||
|
{{- $labelsApplied := include "traefik.labels" $ }}
|
||||||
|
{{- $labelSelectors := regexSplit "," . -1 }}
|
||||||
|
{{- range $labelSelectors }}
|
||||||
|
{{- $labelSelectorRaw := regexSplit "=" . -1 }}
|
||||||
|
{{- $labelSelector := printf "%s: %s" (first $labelSelectorRaw) (last $labelSelectorRaw) }}
|
||||||
|
{{- if not (contains $labelSelector $labelsApplied) }}
|
||||||
|
🚨 Resources populated with this chart don't match with labelSelector `{{.}}` applied on kubernetesIngress provider 🚨
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
131
traefik/base/charts/traefik/templates/_helpers.tpl
Normal file
131
traefik/base/charts/traefik/templates/_helpers.tpl
Normal file
|
@ -0,0 +1,131 @@
|
||||||
|
{{/* vim: set filetype=mustache: */}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Expand the name of the chart.
|
||||||
|
*/}}
|
||||||
|
{{- define "traefik.name" -}}
|
||||||
|
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create chart name and version as used by the chart label.
|
||||||
|
*/}}
|
||||||
|
{{- define "traefik.chart" -}}
|
||||||
|
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create the chart image name.
|
||||||
|
*/}}
|
||||||
|
|
||||||
|
{{- define "traefik.image-name" -}}
|
||||||
|
{{- printf "%s/%s:%s" .Values.image.registry .Values.image.repository (.Values.image.tag | default .Chart.AppVersion) }}
|
||||||
|
{{- 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 "traefik.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 -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Allow customization of the instance label value.
|
||||||
|
*/}}
|
||||||
|
{{- define "traefik.instance-name" -}}
|
||||||
|
{{- default (printf "%s-%s" .Release.Name .Release.Namespace) .Values.instanceLabelOverride | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/* Shared labels used for selector*/}}
|
||||||
|
{{/* This is an immutable field: this should not change between upgrade */}}
|
||||||
|
{{- define "traefik.labelselector" -}}
|
||||||
|
app.kubernetes.io/name: {{ template "traefik.name" . }}
|
||||||
|
app.kubernetes.io/instance: {{ template "traefik.instance-name" . }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/* Shared labels used in metada */}}
|
||||||
|
{{- define "traefik.labels" -}}
|
||||||
|
{{ include "traefik.labelselector" . }}
|
||||||
|
helm.sh/chart: {{ template "traefik.chart" . }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
{{- with .Values.commonLabels }}
|
||||||
|
{{ toYaml . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Construct the namespace for all namespaced resources
|
||||||
|
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
||||||
|
Preserve the default behavior of the Release namespace if no override is provided
|
||||||
|
*/}}
|
||||||
|
{{- define "traefik.namespace" -}}
|
||||||
|
{{- if .Values.namespaceOverride -}}
|
||||||
|
{{- .Values.namespaceOverride | trunc 63 | trimSuffix "-" -}}
|
||||||
|
{{- else -}}
|
||||||
|
{{- .Release.Namespace -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
The name of the service account to use
|
||||||
|
*/}}
|
||||||
|
{{- define "traefik.serviceAccountName" -}}
|
||||||
|
{{- default (include "traefik.fullname" .) .Values.serviceAccount.name -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
The name of the ClusterRole and ClusterRoleBinding to use.
|
||||||
|
Adds the namespace to name to prevent duplicate resource names when there
|
||||||
|
are multiple namespaced releases with the same release name.
|
||||||
|
*/}}
|
||||||
|
{{- define "traefik.clusterRoleName" -}}
|
||||||
|
{{- (printf "%s-%s" (include "traefik.fullname" .) .Release.Namespace) | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Construct the path for the providers.kubernetesingress.ingressendpoint.publishedservice.
|
||||||
|
By convention this will simply use the <namespace>/<service-name> to match the name of the
|
||||||
|
service generated.
|
||||||
|
Users can provide an override for an explicit service they want bound via `.Values.providers.kubernetesIngress.publishedService.pathOverride`
|
||||||
|
*/}}
|
||||||
|
{{- define "providers.kubernetesIngress.publishedServicePath" -}}
|
||||||
|
{{- $defServiceName := printf "%s/%s" .Release.Namespace (include "traefik.fullname" .) -}}
|
||||||
|
{{- $servicePath := default $defServiceName .Values.providers.kubernetesIngress.publishedService.pathOverride }}
|
||||||
|
{{- print $servicePath | trimSuffix "-" -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Construct a comma-separated list of whitelisted namespaces
|
||||||
|
*/}}
|
||||||
|
{{- define "providers.kubernetesIngress.namespaces" -}}
|
||||||
|
{{- default (include "traefik.namespace" .) (join "," .Values.providers.kubernetesIngress.namespaces) }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- define "providers.kubernetesCRD.namespaces" -}}
|
||||||
|
{{- default (include "traefik.namespace" .) (join "," .Values.providers.kubernetesCRD.namespaces) }}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Renders a complete tree, even values that contains template.
|
||||||
|
*/}}
|
||||||
|
{{- define "traefik.render" -}}
|
||||||
|
{{- if typeIs "string" .value }}
|
||||||
|
{{- tpl .value .context }}
|
||||||
|
{{ else }}
|
||||||
|
{{- tpl (.value | toYaml) .context }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- define "imageVersion" -}}
|
||||||
|
{{ (split "@" (default $.Chart.AppVersion $.Values.image.tag))._0 }}
|
||||||
|
{{- end -}}
|
||||||
|
|
783
traefik/base/charts/traefik/templates/_podtemplate.tpl
Normal file
783
traefik/base/charts/traefik/templates/_podtemplate.tpl
Normal file
|
@ -0,0 +1,783 @@
|
||||||
|
{{- define "traefik.podTemplate" }}
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
{{- if .Values.deployment.podAnnotations }}
|
||||||
|
{{- tpl (toYaml .Values.deployment.podAnnotations) . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.metrics }}
|
||||||
|
{{- if and (.Values.metrics.prometheus) (not .Values.metrics.prometheus.serviceMonitor) }}
|
||||||
|
prometheus.io/scrape: "true"
|
||||||
|
prometheus.io/path: "/metrics"
|
||||||
|
prometheus.io/port: {{ quote (index .Values.ports .Values.metrics.prometheus.entryPoint).port }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
{{- include "traefik.labels" . | nindent 8 -}}
|
||||||
|
{{- with .Values.deployment.podLabels }}
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
{{- with .Values.deployment.imagePullSecrets }}
|
||||||
|
imagePullSecrets:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
serviceAccountName: {{ include "traefik.serviceAccountName" . }}
|
||||||
|
terminationGracePeriodSeconds: {{ default 60 .Values.deployment.terminationGracePeriodSeconds }}
|
||||||
|
hostNetwork: {{ .Values.hostNetwork }}
|
||||||
|
{{- with .Values.deployment.dnsPolicy }}
|
||||||
|
dnsPolicy: {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.deployment.dnsConfig }}
|
||||||
|
dnsConfig:
|
||||||
|
{{- if .searches }}
|
||||||
|
searches:
|
||||||
|
{{- toYaml .searches | nindent 10 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .nameservers }}
|
||||||
|
nameservers:
|
||||||
|
{{- toYaml .nameservers | nindent 10 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .options }}
|
||||||
|
options:
|
||||||
|
{{- toYaml .options | nindent 10 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.deployment.initContainers }}
|
||||||
|
initContainers:
|
||||||
|
{{- toYaml . | nindent 6 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.deployment.shareProcessNamespace }}
|
||||||
|
shareProcessNamespace: true
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.deployment.runtimeClassName }}
|
||||||
|
runtimeClassName: {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
containers:
|
||||||
|
- image: {{ template "traefik.image-name" . }}
|
||||||
|
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
||||||
|
name: {{ template "traefik.fullname" . }}
|
||||||
|
resources:
|
||||||
|
{{- with .Values.resources }}
|
||||||
|
{{- toYaml . | nindent 10 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if (and (empty .Values.ports.traefik) (empty .Values.deployment.healthchecksPort)) }}
|
||||||
|
{{- fail "ERROR: When disabling traefik port, you need to specify `deployment.healthchecksPort`" }}
|
||||||
|
{{- end }}
|
||||||
|
{{- $healthchecksPort := (default (.Values.ports.traefik).port .Values.deployment.healthchecksPort) }}
|
||||||
|
{{- $healthchecksScheme := (default "HTTP" .Values.deployment.healthchecksScheme) }}
|
||||||
|
readinessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /ping
|
||||||
|
port: {{ $healthchecksPort }}
|
||||||
|
scheme: {{ $healthchecksScheme }}
|
||||||
|
{{- toYaml .Values.readinessProbe | nindent 10 }}
|
||||||
|
livenessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /ping
|
||||||
|
port: {{ $healthchecksPort }}
|
||||||
|
scheme: {{ $healthchecksScheme }}
|
||||||
|
{{- toYaml .Values.livenessProbe | nindent 10 }}
|
||||||
|
{{- with .Values.startupProbe}}
|
||||||
|
startupProbe:
|
||||||
|
{{- toYaml . | nindent 10 }}
|
||||||
|
{{- end }}
|
||||||
|
lifecycle:
|
||||||
|
{{- with .Values.deployment.lifecycle }}
|
||||||
|
{{- toYaml . | nindent 10 }}
|
||||||
|
{{- end }}
|
||||||
|
ports:
|
||||||
|
{{- $hostNetwork := .Values.hostNetwork }}
|
||||||
|
{{- range $name, $config := .Values.ports }}
|
||||||
|
{{- if $config }}
|
||||||
|
{{- if and $hostNetwork (and $config.hostPort $config.port) }}
|
||||||
|
{{- if ne ($config.hostPort | int) ($config.port | int) }}
|
||||||
|
{{- fail "ERROR: All hostPort must match their respective containerPort when `hostNetwork` is enabled" }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
- name: {{ $name | quote }}
|
||||||
|
containerPort: {{ default $config.port $config.containerPort }}
|
||||||
|
{{- if $config.hostPort }}
|
||||||
|
hostPort: {{ $config.hostPort }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if $config.hostIP }}
|
||||||
|
hostIP: {{ $config.hostIP }}
|
||||||
|
{{- end }}
|
||||||
|
protocol: {{ default "TCP" $config.protocol | quote }}
|
||||||
|
{{- if ($config.http3).enabled }}
|
||||||
|
- name: "{{ $name }}-http3"
|
||||||
|
containerPort: {{ $config.port }}
|
||||||
|
{{- if $config.hostPort }}
|
||||||
|
hostPort: {{ default $config.hostPort $config.http3.advertisedPort }}
|
||||||
|
{{- end }}
|
||||||
|
protocol: UDP
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.securityContext }}
|
||||||
|
securityContext:
|
||||||
|
{{- toYaml . | nindent 10 }}
|
||||||
|
{{- end }}
|
||||||
|
volumeMounts:
|
||||||
|
- name: {{ .Values.persistence.name }}
|
||||||
|
mountPath: {{ .Values.persistence.path }}
|
||||||
|
{{- if .Values.persistence.subPath }}
|
||||||
|
subPath: {{ .Values.persistence.subPath }}
|
||||||
|
{{- end }}
|
||||||
|
- name: tmp
|
||||||
|
mountPath: /tmp
|
||||||
|
{{- $root := . }}
|
||||||
|
{{- range .Values.volumes }}
|
||||||
|
- name: {{ tpl (.name) $root | replace "." "-" }}
|
||||||
|
mountPath: {{ .mountPath }}
|
||||||
|
readOnly: true
|
||||||
|
{{- end }}
|
||||||
|
{{- if gt (len .Values.experimental.plugins) 0 }}
|
||||||
|
- name: plugins
|
||||||
|
mountPath: "/plugins-storage"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.providers.file.enabled }}
|
||||||
|
- name: traefik-extra-config
|
||||||
|
mountPath: "/etc/traefik/dynamic"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.additionalVolumeMounts }}
|
||||||
|
{{- toYaml .Values.additionalVolumeMounts | nindent 10 }}
|
||||||
|
{{- end }}
|
||||||
|
args:
|
||||||
|
{{- with .Values.globalArguments }}
|
||||||
|
{{- range . }}
|
||||||
|
- {{ . | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- range $name, $config := .Values.ports }}
|
||||||
|
{{- if $config }}
|
||||||
|
- "--entrypoints.{{$name}}.address=:{{ $config.port }}/{{ default "tcp" $config.protocol | lower }}"
|
||||||
|
{{- with $config.asDefault }}
|
||||||
|
{{- if semverCompare "<3.0.0-0" (include "imageVersion" $) }}
|
||||||
|
{{- fail "ERROR: Default entrypoints are only available on Traefik v3. Please set `image.tag` to `v3.x`." }}
|
||||||
|
{{- end }}
|
||||||
|
- "--entrypoints.{{$name}}.asDefault={{ . }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
- "--api.dashboard=true"
|
||||||
|
- "--ping=true"
|
||||||
|
|
||||||
|
{{- if .Values.metrics }}
|
||||||
|
{{- with .Values.metrics.datadog }}
|
||||||
|
- "--metrics.datadog=true"
|
||||||
|
{{- with .address }}
|
||||||
|
- "--metrics.datadog.address={{ . }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- with .pushInterval }}
|
||||||
|
- "--metrics.datadog.pushInterval={{ . }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- with .prefix }}
|
||||||
|
- "--metrics.datadog.prefix={{ . }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if ne .addRoutersLabels nil }}
|
||||||
|
{{- with .addRoutersLabels | toString }}
|
||||||
|
- "--metrics.datadog.addRoutersLabels={{ . }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if ne .addEntryPointsLabels nil }}
|
||||||
|
{{- with .addEntryPointsLabels | toString }}
|
||||||
|
- "--metrics.datadog.addEntryPointsLabels={{ . }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if ne .addServicesLabels nil }}
|
||||||
|
{{- with .addServicesLabels | toString }}
|
||||||
|
- "--metrics.datadog.addServicesLabels={{ . }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- with .Values.metrics.influxdb }}
|
||||||
|
- "--metrics.influxdb=true"
|
||||||
|
- "--metrics.influxdb.address={{ .address }}"
|
||||||
|
- "--metrics.influxdb.protocol={{ .protocol }}"
|
||||||
|
{{- with .database }}
|
||||||
|
- "--metrics.influxdb.database={{ . }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- with .retentionPolicy }}
|
||||||
|
- "--metrics.influxdb.retentionPolicy={{ . }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- with .username }}
|
||||||
|
- "--metrics.influxdb.username={{ . }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- with .password }}
|
||||||
|
- "--metrics.influxdb.password={{ . }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- with .pushInterval }}
|
||||||
|
- "--metrics.influxdb.pushInterval={{ . }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- range $name, $value := .additionalLabels }}
|
||||||
|
- "--metrics.influxdb.additionalLabels.{{ $name }}={{ $value }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if ne .addRoutersLabels nil }}
|
||||||
|
{{- with .addRoutersLabels | toString }}
|
||||||
|
- "--metrics.influxdb.addRoutersLabels={{ . }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if ne .addEntryPointsLabels nil }}
|
||||||
|
{{- with .addEntryPointsLabels | toString }}
|
||||||
|
- "--metrics.influxdb.addEntryPointsLabels={{ . }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if ne .addServicesLabels nil }}
|
||||||
|
{{- with .addServicesLabels | toString }}
|
||||||
|
- "--metrics.influxdb.addServicesLabels={{ . }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- with .Values.metrics.influxdb2 }}
|
||||||
|
- "--metrics.influxdb2=true"
|
||||||
|
- "--metrics.influxdb2.address={{ .address }}"
|
||||||
|
- "--metrics.influxdb2.token={{ .token }}"
|
||||||
|
- "--metrics.influxdb2.org={{ .org }}"
|
||||||
|
- "--metrics.influxdb2.bucket={{ .bucket }}"
|
||||||
|
{{- with .pushInterval }}
|
||||||
|
- "--metrics.influxdb2.pushInterval={{ . }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- range $name, $value := .additionalLabels }}
|
||||||
|
- "--metrics.influxdb2.additionalLabels.{{ $name }}={{ $value }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if ne .addRoutersLabels nil }}
|
||||||
|
{{- with .addRoutersLabels | toString }}
|
||||||
|
- "--metrics.influxdb2.addRoutersLabels={{ . }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if ne .addEntryPointsLabels nil }}
|
||||||
|
{{- with .addEntryPointsLabels | toString }}
|
||||||
|
- "--metrics.influxdb2.addEntryPointsLabels={{ . }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if ne .addServicesLabels nil }}
|
||||||
|
{{- with .addServicesLabels | toString }}
|
||||||
|
- "--metrics.influxdb2.addServicesLabels={{ . }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if (.Values.metrics.prometheus) }}
|
||||||
|
- "--metrics.prometheus=true"
|
||||||
|
- "--metrics.prometheus.entrypoint={{ .Values.metrics.prometheus.entryPoint }}"
|
||||||
|
{{- if (eq (.Values.metrics.prometheus.addRoutersLabels | toString) "true") }}
|
||||||
|
- "--metrics.prometheus.addRoutersLabels=true"
|
||||||
|
{{- end }}
|
||||||
|
{{- if ne .Values.metrics.prometheus.addEntryPointsLabels nil }}
|
||||||
|
{{- with .Values.metrics.prometheus.addEntryPointsLabels | toString }}
|
||||||
|
- "--metrics.prometheus.addEntryPointsLabels={{ . }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if ne .Values.metrics.prometheus.addServicesLabels nil }}
|
||||||
|
{{- with .Values.metrics.prometheus.addServicesLabels| toString }}
|
||||||
|
- "--metrics.prometheus.addServicesLabels={{ . }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.metrics.prometheus.buckets }}
|
||||||
|
- "--metrics.prometheus.buckets={{ .Values.metrics.prometheus.buckets }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.metrics.prometheus.manualRouting }}
|
||||||
|
- "--metrics.prometheus.manualrouting=true"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.metrics.statsd }}
|
||||||
|
- "--metrics.statsd=true"
|
||||||
|
- "--metrics.statsd.address={{ .address }}"
|
||||||
|
{{- with .pushInterval }}
|
||||||
|
- "--metrics.statsd.pushInterval={{ . }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- with .prefix }}
|
||||||
|
- "--metrics.statsd.prefix={{ . }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .addRoutersLabels}}
|
||||||
|
- "--metrics.statsd.addRoutersLabels=true"
|
||||||
|
{{- end }}
|
||||||
|
{{- if ne .addEntryPointsLabels nil }}
|
||||||
|
{{- with .addEntryPointsLabels | toString }}
|
||||||
|
- "--metrics.statsd.addEntryPointsLabels={{ . }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if ne .addServicesLabels nil }}
|
||||||
|
{{- with .addServicesLabels | toString }}
|
||||||
|
- "--metrics.statsd.addServicesLabels={{ . }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- with .Values.metrics.openTelemetry }}
|
||||||
|
{{- if semverCompare "<3.0.0-0" (include "imageVersion" $) }}
|
||||||
|
{{- fail "ERROR: OpenTelemetry features are only available on Traefik v3. Please set `image.tag` to `v3.x`." }}
|
||||||
|
{{- end }}
|
||||||
|
- "--metrics.openTelemetry=true"
|
||||||
|
- "--metrics.openTelemetry.address={{ .address }}"
|
||||||
|
{{- if ne .addEntryPointsLabels nil }}
|
||||||
|
{{- with .addEntryPointsLabels | toString }}
|
||||||
|
- "--metrics.openTelemetry.addEntryPointsLabels={{ . }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if ne .addRoutersLabels nil }}
|
||||||
|
{{- with .addRoutersLabels | toString }}
|
||||||
|
- "--metrics.openTelemetry.addRoutersLabels={{ . }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if ne .addServicesLabels nil }}
|
||||||
|
{{- with .addServicesLabels | toString }}
|
||||||
|
- "--metrics.openTelemetry.addServicesLabels={{ . }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .explicitBoundaries }}
|
||||||
|
- "--metrics.openTelemetry.explicitBoundaries={{ join "," . }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- with .headers }}
|
||||||
|
{{- range $name, $value := . }}
|
||||||
|
- "--metrics.openTelemetry.headers.{{ $name }}={{ $value }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .insecure }}
|
||||||
|
- "--metrics.openTelemetry.insecure={{ . }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- with .pushInterval }}
|
||||||
|
- "--metrics.openTelemetry.pushInterval={{ . }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- with .path }}
|
||||||
|
- "--metrics.openTelemetry.path={{ . }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- with .tls }}
|
||||||
|
{{- with .ca }}
|
||||||
|
- "--metrics.openTelemetry.tls.ca={{ . }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- with .cert }}
|
||||||
|
- "--metrics.openTelemetry.tls.cert={{ . }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- with .key }}
|
||||||
|
- "--metrics.openTelemetry.tls.key={{ . }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- with .insecureSkipVerify }}
|
||||||
|
- "--metrics.openTelemetry.tls.insecureSkipVerify={{ . }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .grpc }}
|
||||||
|
- "--metrics.openTelemetry.grpc={{ . }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- if .Values.tracing }}
|
||||||
|
|
||||||
|
{{- if .Values.tracing.openTelemetry }}
|
||||||
|
{{- if semverCompare "<3.0.0-0" (include "imageVersion" $) }}
|
||||||
|
{{- fail "ERROR: OpenTelemetry features are only available on Traefik v3. Please set `image.tag` to `v3.x`." }}
|
||||||
|
{{- end }}
|
||||||
|
- "--tracing.openTelemetry=true"
|
||||||
|
- "--tracing.openTelemetry.address={{ required "ERROR: When enabling openTelemetry on tracing, `tracing.openTelemetry.address` is required." .Values.tracing.openTelemetry.address }}"
|
||||||
|
{{- range $key, $value := .Values.tracing.openTelemetry.headers }}
|
||||||
|
- "--tracing.openTelemetry.headers.{{ $key }}={{ $value }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.tracing.openTelemetry.insecure }}
|
||||||
|
- "--tracing.openTelemetry.insecure={{ .Values.tracing.openTelemetry.insecure }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.tracing.openTelemetry.path }}
|
||||||
|
- "--tracing.openTelemetry.path={{ .Values.tracing.openTelemetry.path }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.tracing.openTelemetry.tls }}
|
||||||
|
{{- if .Values.tracing.openTelemetry.tls.ca }}
|
||||||
|
- "--tracing.openTelemetry.tls.ca={{ .Values.tracing.openTelemetry.tls.ca }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.tracing.openTelemetry.tls.cert }}
|
||||||
|
- "--tracing.openTelemetry.tls.cert={{ .Values.tracing.openTelemetry.tls.cert }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.tracing.openTelemetry.tls.key }}
|
||||||
|
- "--tracing.openTelemetry.tls.key={{ .Values.tracing.openTelemetry.tls.key }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.tracing.openTelemetry.tls.insecureSkipVerify }}
|
||||||
|
- "--tracing.openTelemetry.tls.insecureSkipVerify={{ .Values.tracing.openTelemetry.tls.insecureSkipVerify }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.tracing.openTelemetry.grpc }}
|
||||||
|
- "--tracing.openTelemetry.grpc=true"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- if .Values.tracing.instana }}
|
||||||
|
- "--tracing.instana=true"
|
||||||
|
{{- if .Values.tracing.instana.localAgentHost }}
|
||||||
|
- "--tracing.instana.localAgentHost={{ .Values.tracing.instana.localAgentHost }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.tracing.instana.localAgentPort }}
|
||||||
|
- "--tracing.instana.localAgentPort={{ .Values.tracing.instana.localAgentPort }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.tracing.instana.logLevel }}
|
||||||
|
- "--tracing.instana.logLevel={{ .Values.tracing.instana.logLevel }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.tracing.instana.enableAutoProfile }}
|
||||||
|
- "--tracing.instana.enableAutoProfile={{ .Values.tracing.instana.enableAutoProfile }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.tracing.datadog }}
|
||||||
|
- "--tracing.datadog=true"
|
||||||
|
{{- if .Values.tracing.datadog.localAgentHostPort }}
|
||||||
|
- "--tracing.datadog.localAgentHostPort={{ .Values.tracing.datadog.localAgentHostPort }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.tracing.datadog.debug }}
|
||||||
|
- "--tracing.datadog.debug=true"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.tracing.datadog.globalTag }}
|
||||||
|
- "--tracing.datadog.globalTag={{ .Values.tracing.datadog.globalTag }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.tracing.datadog.prioritySampling }}
|
||||||
|
- "--tracing.datadog.prioritySampling=true"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.tracing.jaeger }}
|
||||||
|
- "--tracing.jaeger=true"
|
||||||
|
{{- if .Values.tracing.jaeger.samplingServerURL }}
|
||||||
|
- "--tracing.jaeger.samplingServerURL={{ .Values.tracing.jaeger.samplingServerURL }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.tracing.jaeger.samplingType }}
|
||||||
|
- "--tracing.jaeger.samplingType={{ .Values.tracing.jaeger.samplingType }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.tracing.jaeger.samplingParam }}
|
||||||
|
- "--tracing.jaeger.samplingParam={{ .Values.tracing.jaeger.samplingParam }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.tracing.jaeger.localAgentHostPort }}
|
||||||
|
- "--tracing.jaeger.localAgentHostPort={{ .Values.tracing.jaeger.localAgentHostPort }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.tracing.jaeger.gen128Bit }}
|
||||||
|
- "--tracing.jaeger.gen128Bit={{ .Values.tracing.jaeger.gen128Bit }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.tracing.jaeger.propagation }}
|
||||||
|
- "--tracing.jaeger.propagation={{ .Values.tracing.jaeger.propagation }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.tracing.jaeger.traceContextHeaderName }}
|
||||||
|
- "--tracing.jaeger.traceContextHeaderName={{ .Values.tracing.jaeger.traceContextHeaderName }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.tracing.jaeger.disableAttemptReconnecting }}
|
||||||
|
- "--tracing.jaeger.disableAttemptReconnecting={{ .Values.tracing.jaeger.disableAttemptReconnecting }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.tracing.jaeger.collector }}
|
||||||
|
{{- if .Values.tracing.jaeger.collector.endpoint }}
|
||||||
|
- "--tracing.jaeger.collector.endpoint={{ .Values.tracing.jaeger.collector.endpoint }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.tracing.jaeger.collector.user }}
|
||||||
|
- "--tracing.jaeger.collector.user={{ .Values.tracing.jaeger.collector.user }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.tracing.jaeger.collector.password }}
|
||||||
|
- "--tracing.jaeger.collector.password={{ .Values.tracing.jaeger.collector.password }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.tracing.zipkin }}
|
||||||
|
- "--tracing.zipkin=true"
|
||||||
|
{{- if .Values.tracing.zipkin.httpEndpoint }}
|
||||||
|
- "--tracing.zipkin.httpEndpoint={{ .Values.tracing.zipkin.httpEndpoint }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.tracing.zipkin.sameSpan }}
|
||||||
|
- "--tracing.zipkin.sameSpan={{ .Values.tracing.zipkin.sameSpan }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.tracing.zipkin.id128Bit }}
|
||||||
|
- "--tracing.zipkin.id128Bit={{ .Values.tracing.zipkin.id128Bit }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.tracing.zipkin.sampleRate }}
|
||||||
|
- "--tracing.zipkin.sampleRate={{ .Values.tracing.zipkin.sampleRate }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.tracing.haystack }}
|
||||||
|
- "--tracing.haystack=true"
|
||||||
|
{{- if .Values.tracing.haystack.localAgentHost }}
|
||||||
|
- "--tracing.haystack.localAgentHost={{ .Values.tracing.haystack.localAgentHost }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.tracing.haystack.localAgentPort }}
|
||||||
|
- "--tracing.haystack.localAgentPort={{ .Values.tracing.haystack.localAgentPort }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.tracing.haystack.globalTag }}
|
||||||
|
- "--tracing.haystack.globalTag={{ .Values.tracing.haystack.globalTag }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.tracing.haystack.traceIDHeaderName }}
|
||||||
|
- "--tracing.haystack.traceIDHeaderName={{ .Values.tracing.haystack.traceIDHeaderName }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.tracing.haystack.parentIDHeaderName }}
|
||||||
|
- "--tracing.haystack.parentIDHeaderName={{ .Values.tracing.haystack.parentIDHeaderName }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.tracing.haystack.spanIDHeaderName }}
|
||||||
|
- "--tracing.haystack.spanIDHeaderName={{ .Values.tracing.haystack.spanIDHeaderName }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.tracing.haystack.baggagePrefixHeaderName }}
|
||||||
|
- "--tracing.haystack.baggagePrefixHeaderName={{ .Values.tracing.haystack.baggagePrefixHeaderName }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.tracing.elastic }}
|
||||||
|
- "--tracing.elastic=true"
|
||||||
|
{{- if .Values.tracing.elastic.serverURL }}
|
||||||
|
- "--tracing.elastic.serverURL={{ .Values.tracing.elastic.serverURL }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.tracing.elastic.secretToken }}
|
||||||
|
- "--tracing.elastic.secretToken={{ .Values.tracing.elastic.secretToken }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.tracing.elastic.serviceEnvironment }}
|
||||||
|
- "--tracing.elastic.serviceEnvironment={{ .Values.tracing.elastic.serviceEnvironment }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- range $pluginName, $plugin := .Values.experimental.plugins }}
|
||||||
|
{{- if or (ne (typeOf $plugin) "map[string]interface {}") (not (hasKey $plugin "moduleName")) (not (hasKey $plugin "version")) }}
|
||||||
|
{{- fail (printf "ERROR: plugin %s is missing moduleName/version keys !" $pluginName) }}
|
||||||
|
{{- end }}
|
||||||
|
- "--experimental.plugins.{{ $pluginName }}.moduleName={{ $plugin.moduleName }}"
|
||||||
|
- "--experimental.plugins.{{ $pluginName }}.version={{ $plugin.version }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.providers.kubernetesCRD.enabled }}
|
||||||
|
- "--providers.kubernetescrd"
|
||||||
|
{{- if .Values.providers.kubernetesCRD.labelSelector }}
|
||||||
|
- "--providers.kubernetescrd.labelSelector={{ .Values.providers.kubernetesCRD.labelSelector }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.providers.kubernetesCRD.ingressClass }}
|
||||||
|
- "--providers.kubernetescrd.ingressClass={{ .Values.providers.kubernetesCRD.ingressClass }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.providers.kubernetesCRD.allowCrossNamespace }}
|
||||||
|
- "--providers.kubernetescrd.allowCrossNamespace=true"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.providers.kubernetesCRD.allowExternalNameServices }}
|
||||||
|
- "--providers.kubernetescrd.allowExternalNameServices=true"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.providers.kubernetesCRD.allowEmptyServices }}
|
||||||
|
- "--providers.kubernetescrd.allowEmptyServices=true"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.providers.kubernetesIngress.enabled }}
|
||||||
|
- "--providers.kubernetesingress"
|
||||||
|
{{- if .Values.providers.kubernetesIngress.allowExternalNameServices }}
|
||||||
|
- "--providers.kubernetesingress.allowExternalNameServices=true"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.providers.kubernetesIngress.allowEmptyServices }}
|
||||||
|
- "--providers.kubernetesingress.allowEmptyServices=true"
|
||||||
|
{{- end }}
|
||||||
|
{{- if and .Values.service.enabled .Values.providers.kubernetesIngress.publishedService.enabled }}
|
||||||
|
- "--providers.kubernetesingress.ingressendpoint.publishedservice={{ template "providers.kubernetesIngress.publishedServicePath" . }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.providers.kubernetesIngress.labelSelector }}
|
||||||
|
- "--providers.kubernetesingress.labelSelector={{ .Values.providers.kubernetesIngress.labelSelector }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.providers.kubernetesIngress.ingressClass }}
|
||||||
|
- "--providers.kubernetesingress.ingressClass={{ .Values.providers.kubernetesIngress.ingressClass }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.experimental.kubernetesGateway.enabled }}
|
||||||
|
- "--providers.kubernetesgateway"
|
||||||
|
- "--experimental.kubernetesgateway"
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.providers.kubernetesCRD }}
|
||||||
|
{{- if (and .enabled (or .namespaces (and $.Values.rbac.enabled $.Values.rbac.namespaced))) }}
|
||||||
|
- "--providers.kubernetescrd.namespaces={{ template "providers.kubernetesCRD.namespaces" $ }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.providers.kubernetesIngress }}
|
||||||
|
{{- if (and .enabled (or .namespaces (and $.Values.rbac.enabled $.Values.rbac.namespaced))) }}
|
||||||
|
- "--providers.kubernetesingress.namespaces={{ template "providers.kubernetesIngress.namespaces" $ }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.providers.file }}
|
||||||
|
{{- if .enabled }}
|
||||||
|
- "--providers.file.directory=/etc/traefik/dynamic"
|
||||||
|
{{- if .watch }}
|
||||||
|
- "--providers.file.watch=true"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- range $entrypoint, $config := $.Values.ports }}
|
||||||
|
{{- if $config }}
|
||||||
|
{{- if $config.redirectTo }}
|
||||||
|
{{- if eq (typeOf $config.redirectTo) "string" }}
|
||||||
|
{{- fail "ERROR: Syntax of `ports.web.redirectTo` has changed to `ports.web.redirectTo.port`. Details in PR #934." }}
|
||||||
|
{{- end }}
|
||||||
|
{{- $toPort := index $.Values.ports $config.redirectTo.port }}
|
||||||
|
- "--entrypoints.{{ $entrypoint }}.http.redirections.entryPoint.to=:{{ $toPort.exposedPort }}"
|
||||||
|
- "--entrypoints.{{ $entrypoint }}.http.redirections.entryPoint.scheme=https"
|
||||||
|
{{- if $config.redirectTo.priority }}
|
||||||
|
- "--entrypoints.{{ $entrypoint }}.http.redirections.entryPoint.priority={{ $config.redirectTo.priority }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if $config.middlewares }}
|
||||||
|
- "--entrypoints.{{ $entrypoint }}.http.middlewares={{ join "," $config.middlewares }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if $config.tls }}
|
||||||
|
{{- if $config.tls.enabled }}
|
||||||
|
- "--entrypoints.{{ $entrypoint }}.http.tls=true"
|
||||||
|
{{- if $config.tls.options }}
|
||||||
|
- "--entrypoints.{{ $entrypoint }}.http.tls.options={{ $config.tls.options }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if $config.tls.certResolver }}
|
||||||
|
- "--entrypoints.{{ $entrypoint }}.http.tls.certResolver={{ $config.tls.certResolver }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if $config.tls.domains }}
|
||||||
|
{{- range $index, $domain := $config.tls.domains }}
|
||||||
|
{{- if $domain.main }}
|
||||||
|
- "--entrypoints.{{ $entrypoint }}.http.tls.domains[{{ $index }}].main={{ $domain.main }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if $domain.sans }}
|
||||||
|
- "--entrypoints.{{ $entrypoint }}.http.tls.domains[{{ $index }}].sans={{ join "," $domain.sans }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if $config.http3 }}
|
||||||
|
{{- if $config.http3.enabled }}
|
||||||
|
{{- if semverCompare "<3.0.0-0" (include "imageVersion" $)}}
|
||||||
|
- "--experimental.http3=true"
|
||||||
|
{{- end }}
|
||||||
|
{{- if semverCompare ">=2.6.0-0" (include "imageVersion" $)}}
|
||||||
|
- "--entrypoints.{{ $entrypoint }}.http3"
|
||||||
|
{{- else }}
|
||||||
|
- "--entrypoints.{{ $entrypoint }}.enableHTTP3=true"
|
||||||
|
{{- end }}
|
||||||
|
{{- if $config.http3.advertisedPort }}
|
||||||
|
- "--entrypoints.{{ $entrypoint }}.http3.advertisedPort={{ $config.http3.advertisedPort }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if $config.forwardedHeaders }}
|
||||||
|
{{- if $config.forwardedHeaders.trustedIPs }}
|
||||||
|
- "--entrypoints.{{ $entrypoint }}.forwardedHeaders.trustedIPs={{ join "," $config.forwardedHeaders.trustedIPs }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if $config.forwardedHeaders.insecure }}
|
||||||
|
- "--entrypoints.{{ $entrypoint }}.forwardedHeaders.insecure"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if $config.proxyProtocol }}
|
||||||
|
{{- if $config.proxyProtocol.trustedIPs }}
|
||||||
|
- "--entrypoints.{{ $entrypoint }}.proxyProtocol.trustedIPs={{ join "," $config.proxyProtocol.trustedIPs }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if $config.proxyProtocol.insecure }}
|
||||||
|
- "--entrypoints.{{ $entrypoint }}.proxyProtocol.insecure"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.logs }}
|
||||||
|
{{- if .general.format }}
|
||||||
|
- "--log.format={{ .general.format }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if ne .general.level "ERROR" }}
|
||||||
|
- "--log.level={{ .general.level | upper }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .access.enabled }}
|
||||||
|
- "--accesslog=true"
|
||||||
|
{{- if .access.format }}
|
||||||
|
- "--accesslog.format={{ .access.format }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .access.filePath }}
|
||||||
|
- "--accesslog.filepath={{ .access.filePath }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .access.bufferingSize }}
|
||||||
|
- "--accesslog.bufferingsize={{ .access.bufferingSize }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .access.filters }}
|
||||||
|
{{- if .access.filters.statuscodes }}
|
||||||
|
- "--accesslog.filters.statuscodes={{ .access.filters.statuscodes }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .access.filters.retryattempts }}
|
||||||
|
- "--accesslog.filters.retryattempts"
|
||||||
|
{{- end }}
|
||||||
|
{{- if .access.filters.minduration }}
|
||||||
|
- "--accesslog.filters.minduration={{ .access.filters.minduration }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
- "--accesslog.fields.defaultmode={{ .access.fields.general.defaultmode }}"
|
||||||
|
{{- range $fieldname, $fieldaction := .access.fields.general.names }}
|
||||||
|
- "--accesslog.fields.names.{{ $fieldname }}={{ $fieldaction }}"
|
||||||
|
{{- end }}
|
||||||
|
- "--accesslog.fields.headers.defaultmode={{ .access.fields.headers.defaultmode }}"
|
||||||
|
{{- range $fieldname, $fieldaction := .access.fields.headers.names }}
|
||||||
|
- "--accesslog.fields.headers.names.{{ $fieldname }}={{ $fieldaction }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- range $resolver, $config := $.Values.certResolvers }}
|
||||||
|
{{- range $option, $setting := $config }}
|
||||||
|
{{- if kindIs "map" $setting }}
|
||||||
|
{{- range $field, $value := $setting }}
|
||||||
|
- "--certificatesresolvers.{{ $resolver }}.acme.{{ $option }}.{{ $field }}={{ if kindIs "slice" $value }}{{ join "," $value }}{{ else }}{{ $value }}{{ end }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- else }}
|
||||||
|
- "--certificatesresolvers.{{ $resolver }}.acme.{{ $option }}={{ $setting }}"
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.additionalArguments }}
|
||||||
|
{{- range . }}
|
||||||
|
- {{ . | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.env }}
|
||||||
|
env:
|
||||||
|
{{- toYaml . | nindent 10 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.envFrom }}
|
||||||
|
envFrom:
|
||||||
|
{{- toYaml . | nindent 10 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.deployment.additionalContainers }}
|
||||||
|
{{- toYaml .Values.deployment.additionalContainers | nindent 6 }}
|
||||||
|
{{- end }}
|
||||||
|
volumes:
|
||||||
|
- name: {{ .Values.persistence.name }}
|
||||||
|
{{- if .Values.persistence.enabled }}
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: {{ default (include "traefik.fullname" .) .Values.persistence.existingClaim }}
|
||||||
|
{{- else }}
|
||||||
|
emptyDir: {}
|
||||||
|
{{- end }}
|
||||||
|
- name: tmp
|
||||||
|
emptyDir: {}
|
||||||
|
{{- $root := . }}
|
||||||
|
{{- range .Values.volumes }}
|
||||||
|
- name: {{ tpl (.name) $root | replace "." "-" }}
|
||||||
|
{{- if eq .type "secret" }}
|
||||||
|
secret:
|
||||||
|
secretName: {{ tpl (.name) $root }}
|
||||||
|
{{- else if eq .type "configMap" }}
|
||||||
|
configMap:
|
||||||
|
name: {{ tpl (.name) $root }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.deployment.additionalVolumes }}
|
||||||
|
{{- toYaml .Values.deployment.additionalVolumes | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if gt (len .Values.experimental.plugins) 0 }}
|
||||||
|
- name: plugins
|
||||||
|
emptyDir: {}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.providers.file.enabled }}
|
||||||
|
- name: traefik-extra-config
|
||||||
|
configMap:
|
||||||
|
name: {{ template "traefik.fullname" . }}-file-provider
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.affinity }}
|
||||||
|
affinity:
|
||||||
|
{{- tpl (toYaml .Values.affinity) . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.tolerations }}
|
||||||
|
tolerations:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.nodeSelector }}
|
||||||
|
nodeSelector:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.priorityClassName }}
|
||||||
|
priorityClassName: {{ .Values.priorityClassName }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.podSecurityContext }}
|
||||||
|
securityContext:
|
||||||
|
{{- toYaml . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.topologySpreadConstraints }}
|
||||||
|
{{- if (semverCompare "<1.19.0-0" .Capabilities.KubeVersion.Version) }}
|
||||||
|
{{- fail "ERROR: topologySpreadConstraints are supported only on kubernetes >= v1.19" -}}
|
||||||
|
{{- end }}
|
||||||
|
topologySpreadConstraints:
|
||||||
|
{{- tpl (toYaml .Values.topologySpreadConstraints) . | nindent 8 }}
|
||||||
|
{{- end }}
|
||||||
|
{{ end -}}
|
48
traefik/base/charts/traefik/templates/_service-internal.tpl
Normal file
48
traefik/base/charts/traefik/templates/_service-internal.tpl
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
{{- define "traefik.service-internal-metadata" }}
|
||||||
|
labels:
|
||||||
|
{{- include "traefik.labels" . | nindent 4 -}}
|
||||||
|
{{- with .Values.service.internal.labels }}
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- define "traefik.service-internal-spec" -}}
|
||||||
|
{{- $type := default "ClusterIP" .Values.service.internal.type }}
|
||||||
|
type: {{ $type }}
|
||||||
|
{{- with .Values.service.internal.spec }}
|
||||||
|
{{- toYaml . | nindent 2 }}
|
||||||
|
{{- end }}
|
||||||
|
selector:
|
||||||
|
{{- include "traefik.labelselector" . | nindent 4 }}
|
||||||
|
{{- if eq $type "LoadBalancer" }}
|
||||||
|
{{- with .Values.service.internal.loadBalancerSourceRanges }}
|
||||||
|
loadBalancerSourceRanges:
|
||||||
|
{{- toYaml . | nindent 2 }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- with .Values.service.internal.externalIPs }}
|
||||||
|
externalIPs:
|
||||||
|
{{- toYaml . | nindent 2 }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- with .Values.service.internal.ipFamilyPolicy }}
|
||||||
|
ipFamilyPolicy: {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.service.internal.ipFamilies }}
|
||||||
|
ipFamilies:
|
||||||
|
{{- toYaml . | nindent 2 }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- define "traefik.service-internal-ports" }}
|
||||||
|
{{- range $name, $config := . }}
|
||||||
|
{{- if (or $config.expose $config.exposeInternal) }}
|
||||||
|
- port: {{ default $config.port $config.exposedPort }}
|
||||||
|
name: {{ $name | quote }}
|
||||||
|
targetPort: {{ default $name $config.targetPort }}
|
||||||
|
protocol: {{ default "TCP" $config.protocol }}
|
||||||
|
{{- if $config.nodePort }}
|
||||||
|
nodePort: {{ $config.nodePort }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
25
traefik/base/charts/traefik/templates/_service-metrics.tpl
Normal file
25
traefik/base/charts/traefik/templates/_service-metrics.tpl
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
{{- define "traefik.metrics-service-metadata" }}
|
||||||
|
labels:
|
||||||
|
{{- include "traefik.metricsservicelabels" . | nindent 4 -}}
|
||||||
|
{{- with .Values.metrics.prometheus.service.labels }}
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/* Labels used for metrics-relevant selector*/}}
|
||||||
|
{{/* This is an immutable field: this should not change between upgrade */}}
|
||||||
|
{{- define "traefik.metricslabelselector" -}}
|
||||||
|
{{- include "traefik.labelselector" . }}
|
||||||
|
app.kubernetes.io/component: metrics
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/* Shared labels used in metadata of metrics-service and servicemonitor */}}
|
||||||
|
{{- define "traefik.metricsservicelabels" -}}
|
||||||
|
{{ include "traefik.metricslabelselector" . }}
|
||||||
|
helm.sh/chart: {{ template "traefik.chart" . }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
{{- with .Values.commonLabels }}
|
||||||
|
{{ toYaml . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
69
traefik/base/charts/traefik/templates/_service.tpl
Normal file
69
traefik/base/charts/traefik/templates/_service.tpl
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
{{- define "traefik.service-metadata" }}
|
||||||
|
labels:
|
||||||
|
{{- include "traefik.labels" . | nindent 4 -}}
|
||||||
|
{{- with .Values.service.labels }}
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- define "traefik.service-spec" -}}
|
||||||
|
{{- $type := default "LoadBalancer" .Values.service.type }}
|
||||||
|
type: {{ $type }}
|
||||||
|
{{- with .Values.service.loadBalancerClass }}
|
||||||
|
loadBalancerClass: {{ . }}
|
||||||
|
{{- end}}
|
||||||
|
{{- with .Values.service.spec }}
|
||||||
|
{{- toYaml . | nindent 2 }}
|
||||||
|
{{- end }}
|
||||||
|
selector:
|
||||||
|
{{- include "traefik.labelselector" . | nindent 4 }}
|
||||||
|
{{- if eq $type "LoadBalancer" }}
|
||||||
|
{{- with .Values.service.loadBalancerSourceRanges }}
|
||||||
|
loadBalancerSourceRanges:
|
||||||
|
{{- toYaml . | nindent 2 }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- with .Values.service.externalIPs }}
|
||||||
|
externalIPs:
|
||||||
|
{{- toYaml . | nindent 2 }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- with .Values.service.ipFamilyPolicy }}
|
||||||
|
ipFamilyPolicy: {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.service.ipFamilies }}
|
||||||
|
ipFamilies:
|
||||||
|
{{- toYaml . | nindent 2 }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- define "traefik.service-ports" }}
|
||||||
|
{{- range $name, $config := . }}
|
||||||
|
{{- if $config.expose }}
|
||||||
|
- port: {{ default $config.port $config.exposedPort }}
|
||||||
|
name: {{ $name | quote }}
|
||||||
|
targetPort: {{ default $name $config.targetPort }}
|
||||||
|
protocol: {{ default "TCP" $config.protocol }}
|
||||||
|
{{- if $config.nodePort }}
|
||||||
|
nodePort: {{ $config.nodePort }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if $config.appProtocol }}
|
||||||
|
appProtocol: {{ $config.appProtocol }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if $config.http3 }}
|
||||||
|
{{- if $config.http3.enabled }}
|
||||||
|
{{- $http3Port := default $config.exposedPort $config.http3.advertisedPort }}
|
||||||
|
- port: {{ $http3Port }}
|
||||||
|
name: "{{ $name }}-http3"
|
||||||
|
targetPort: {{ $name }}-http3
|
||||||
|
protocol: UDP
|
||||||
|
{{- if $config.nodePort }}
|
||||||
|
nodePort: {{ $config.nodePort }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if $config.appProtocol }}
|
||||||
|
appProtocol: {{ $config.appProtocol }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
50
traefik/base/charts/traefik/templates/daemonset.yaml
Normal file
50
traefik/base/charts/traefik/templates/daemonset.yaml
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
{{- if and .Values.deployment.enabled (eq .Values.deployment.kind "DaemonSet") -}}
|
||||||
|
{{- with .Values.additionalArguments -}}
|
||||||
|
{{- range . -}}
|
||||||
|
{{- if contains ".acme." . -}}
|
||||||
|
{{- fail (printf "ACME functionality is not supported when running Traefik as a DaemonSet") -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if eq (default .Chart.AppVersion .Values.image.tag) "latest" }}
|
||||||
|
{{- fail "\n\n ERROR: latest tag should not be used" }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.updateStrategy }}
|
||||||
|
{{- if eq (.type) "RollingUpdate" }}
|
||||||
|
{{- if not (contains "%" (toString .rollingUpdate.maxUnavailable)) }}
|
||||||
|
{{- if and ($.Values.hostNetwork) (lt (float64 .rollingUpdate.maxUnavailable) 1.0) }}
|
||||||
|
{{- fail "maxUnavailable should be greater than 1 when using hostNetwork." }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: DaemonSet
|
||||||
|
metadata:
|
||||||
|
name: {{ template "traefik.fullname" . }}
|
||||||
|
namespace: {{ template "traefik.namespace" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "traefik.labels" . | nindent 4 }}
|
||||||
|
{{- with .Values.deployment.labels }}
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
annotations:
|
||||||
|
{{- if and .Values.providers.file.enabled (not .Values.providers.file.watch) }}
|
||||||
|
checksum/traefik-dynamic-conf: {{ include (print $.Template.BasePath "/provider-file-cm.yaml") . | sha256sum }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.deployment.annotations }}
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "traefik.labelselector" . | nindent 6 }}
|
||||||
|
updateStrategy: {{ toYaml .Values.updateStrategy | nindent 4 }}
|
||||||
|
minReadySeconds: {{ .Values.deployment.minReadySeconds }}
|
||||||
|
{{- if .Values.deployment.revisionHistoryLimit }}
|
||||||
|
revisionHistoryLimit: {{ .Values.deployment.revisionHistoryLimit }}
|
||||||
|
{{- end }}
|
||||||
|
template: {{ template "traefik.podTemplate" . }}
|
||||||
|
{{- end -}}
|
|
@ -0,0 +1,36 @@
|
||||||
|
{{- if .Values.ingressRoute.dashboard.enabled -}}
|
||||||
|
apiVersion: traefik.io/v1alpha1
|
||||||
|
kind: IngressRoute
|
||||||
|
metadata:
|
||||||
|
name: {{ template "traefik.fullname" . }}-dashboard
|
||||||
|
namespace: {{ template "traefik.namespace" . }}
|
||||||
|
annotations:
|
||||||
|
{{- with .Values.ingressRoute.dashboard.annotations }}
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
{{- include "traefik.labels" . | nindent 4 }}
|
||||||
|
{{- with .Values.ingressRoute.dashboard.labels }}
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
entryPoints:
|
||||||
|
{{- range .Values.ingressRoute.dashboard.entryPoints }}
|
||||||
|
- {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
routes:
|
||||||
|
- match: {{ .Values.ingressRoute.dashboard.matchRule }}
|
||||||
|
kind: Rule
|
||||||
|
services:
|
||||||
|
- name: api@internal
|
||||||
|
kind: TraefikService
|
||||||
|
{{- with .Values.ingressRoute.dashboard.middlewares }}
|
||||||
|
middlewares:
|
||||||
|
{{- toYaml . | nindent 6 }}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- with .Values.ingressRoute.dashboard.tls }}
|
||||||
|
tls:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end -}}
|
54
traefik/base/charts/traefik/templates/deployment.yaml
Normal file
54
traefik/base/charts/traefik/templates/deployment.yaml
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
{{/* check helm version */}}
|
||||||
|
{{- if (semverCompare "<v3.9.0" (.Capabilities.HelmVersion.Version | default "v3.0.0")) -}}
|
||||||
|
{{- fail "ERROR: Helm >= 3.9.0 is required" -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if and .Values.deployment.enabled (eq .Values.deployment.kind "Deployment") -}}
|
||||||
|
{{- if gt (int .Values.deployment.replicas) 1 -}}
|
||||||
|
{{- with .Values.additionalArguments -}}
|
||||||
|
{{- range . -}}
|
||||||
|
{{- if contains ".acme." . -}}
|
||||||
|
{{- fail (printf "You can not enable acme if you set more than one traefik replica") -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if eq (default .Chart.AppVersion .Values.image.tag) "latest" }}
|
||||||
|
{{- fail "\n\n ERROR: latest tag should not be used" }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- if ne (typeOf .Values.experimental.plugins) "map[string]interface {}" }}
|
||||||
|
{{- fail (printf "ERROR: .Values.experimental.plugins should be a map (%s provided) !" (typeOf .Values.experimental.plugins)) }}
|
||||||
|
{{- end }}
|
||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: {{ template "traefik.fullname" . }}
|
||||||
|
namespace: {{ template "traefik.namespace" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "traefik.labels" . | nindent 4 }}
|
||||||
|
{{- with .Values.deployment.labels }}
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
annotations:
|
||||||
|
{{- if and .Values.providers.file.enabled (not .Values.providers.file.watch) }}
|
||||||
|
checksum/traefik-dynamic-conf: {{ include (print $.Template.BasePath "/provider-file-cm.yaml") . | sha256sum }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.deployment.annotations }}
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
{{- if not .Values.autoscaling.enabled }}
|
||||||
|
replicas: {{ default 1 .Values.deployment.replicas }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.deployment.revisionHistoryLimit }}
|
||||||
|
revisionHistoryLimit: {{ .Values.deployment.revisionHistoryLimit }}
|
||||||
|
{{- end }}
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "traefik.labelselector" . | nindent 6 }}
|
||||||
|
strategy: {{ toYaml .Values.updateStrategy | nindent 4 }}
|
||||||
|
minReadySeconds: {{ .Values.deployment.minReadySeconds }}
|
||||||
|
template: {{ template "traefik.podTemplate" . }}
|
||||||
|
{{- end -}}
|
4
traefik/base/charts/traefik/templates/extra-objects.yaml
Normal file
4
traefik/base/charts/traefik/templates/extra-objects.yaml
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
{{- range .Values.extraObjects }}
|
||||||
|
---
|
||||||
|
{{ include "traefik.render" (dict "value" . "context" $) }}
|
||||||
|
{{- end }}
|
44
traefik/base/charts/traefik/templates/gateway.yaml
Normal file
44
traefik/base/charts/traefik/templates/gateway.yaml
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
{{- if .Values.experimental.kubernetesGateway.enabled }}
|
||||||
|
---
|
||||||
|
{{- if semverCompare ">=3.0.0-rc1" (default $.Chart.AppVersion $.Values.image.tag)}}
|
||||||
|
apiVersion: gateway.networking.k8s.io/v1
|
||||||
|
{{- else }}
|
||||||
|
apiVersion: gateway.networking.k8s.io/v1alpha2
|
||||||
|
{{- end }}
|
||||||
|
kind: Gateway
|
||||||
|
metadata:
|
||||||
|
name: traefik-gateway
|
||||||
|
namespace: {{ default (include "traefik.namespace" .) .Values.experimental.kubernetesGateway.namespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "traefik.labels" . | nindent 4 }}
|
||||||
|
{{- with .Values.experimental.kubernetesGateway.annotations }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
gatewayClassName: traefik
|
||||||
|
listeners:
|
||||||
|
- name: web
|
||||||
|
port: {{ .Values.ports.web.port }}
|
||||||
|
protocol: HTTP
|
||||||
|
{{- with .Values.experimental.kubernetesGateway.namespacePolicy }}
|
||||||
|
allowedRoutes:
|
||||||
|
namespaces:
|
||||||
|
from: {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.experimental.kubernetesGateway.certificate }}
|
||||||
|
- name: websecure
|
||||||
|
port: {{ $.Values.ports.websecure.port }}
|
||||||
|
protocol: HTTPS
|
||||||
|
{{- with .Values.experimental.kubernetesGateway.namespacePolicy }}
|
||||||
|
allowedRoutes:
|
||||||
|
namespaces:
|
||||||
|
from: {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
tls:
|
||||||
|
certificateRefs:
|
||||||
|
- name: {{ .Values.experimental.kubernetesGateway.certificate.name }}
|
||||||
|
group: {{ .Values.experimental.kubernetesGateway.certificate.group }}
|
||||||
|
kind: {{ .Values.experimental.kubernetesGateway.certificate.kind }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
15
traefik/base/charts/traefik/templates/gatewayclass.yaml
Normal file
15
traefik/base/charts/traefik/templates/gatewayclass.yaml
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
{{- if .Values.experimental.kubernetesGateway.enabled }}
|
||||||
|
---
|
||||||
|
{{- if semverCompare ">=3.0.0-rc1" (default $.Chart.AppVersion $.Values.image.tag)}}
|
||||||
|
apiVersion: gateway.networking.k8s.io/v1
|
||||||
|
{{- else }}
|
||||||
|
apiVersion: gateway.networking.k8s.io/v1alpha2
|
||||||
|
{{- end }}
|
||||||
|
kind: GatewayClass
|
||||||
|
metadata:
|
||||||
|
name: traefik
|
||||||
|
labels:
|
||||||
|
{{- include "traefik.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
controllerName: traefik.io/gateway-controller
|
||||||
|
{{- end }}
|
|
@ -0,0 +1,36 @@
|
||||||
|
{{- if .Values.ingressRoute.healthcheck.enabled -}}
|
||||||
|
apiVersion: traefik.io/v1alpha1
|
||||||
|
kind: IngressRoute
|
||||||
|
metadata:
|
||||||
|
name: {{ template "traefik.fullname" . }}-healthcheck
|
||||||
|
namespace: {{ template "traefik.namespace" . }}
|
||||||
|
annotations:
|
||||||
|
{{- with .Values.ingressRoute.healthcheck.annotations }}
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
labels:
|
||||||
|
{{- include "traefik.labels" . | nindent 4 }}
|
||||||
|
{{- with .Values.ingressRoute.healthcheck.labels }}
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
entryPoints:
|
||||||
|
{{- range .Values.ingressRoute.healthcheck.entryPoints }}
|
||||||
|
- {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
routes:
|
||||||
|
- match: {{ .Values.ingressRoute.healthcheck.matchRule }}
|
||||||
|
kind: Rule
|
||||||
|
services:
|
||||||
|
- name: ping@internal
|
||||||
|
kind: TraefikService
|
||||||
|
{{- with .Values.ingressRoute.healthcheck.middlewares }}
|
||||||
|
middlewares:
|
||||||
|
{{- toYaml . | nindent 6 }}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- with .Values.ingressRoute.healthcheck.tls }}
|
||||||
|
tls:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end -}}
|
35
traefik/base/charts/traefik/templates/hpa.yaml
Normal file
35
traefik/base/charts/traefik/templates/hpa.yaml
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
{{- if .Values.autoscaling.enabled }}
|
||||||
|
|
||||||
|
{{- if not .Values.autoscaling.maxReplicas }}
|
||||||
|
{{- fail "ERROR: maxReplicas is required on HPA" }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- if semverCompare ">=1.23.0-0" .Capabilities.KubeVersion.Version }}
|
||||||
|
apiVersion: autoscaling/v2
|
||||||
|
{{- else }}
|
||||||
|
apiVersion: autoscaling/v2beta2
|
||||||
|
{{- end }}
|
||||||
|
kind: HorizontalPodAutoscaler
|
||||||
|
metadata:
|
||||||
|
name: {{ template "traefik.fullname" . }}
|
||||||
|
namespace: {{ template "traefik.namespace" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "traefik.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
scaleTargetRef:
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
name: {{ template "traefik.fullname" . }}
|
||||||
|
{{- if .Values.autoscaling.minReplicas }}
|
||||||
|
minReplicas: {{ .Values.autoscaling.minReplicas }}
|
||||||
|
{{- end }}
|
||||||
|
maxReplicas: {{ .Values.autoscaling.maxReplicas }}
|
||||||
|
{{- if .Values.autoscaling.metrics }}
|
||||||
|
metrics:
|
||||||
|
{{ toYaml .Values.autoscaling.metrics | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.autoscaling.behavior }}
|
||||||
|
behavior:
|
||||||
|
{{ toYaml .Values.autoscaling.behavior | indent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
21
traefik/base/charts/traefik/templates/ingressclass.yaml
Normal file
21
traefik/base/charts/traefik/templates/ingressclass.yaml
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
{{- if .Values.ingressClass.enabled -}}
|
||||||
|
{{- if (semverCompare "<2.3.0" (include "imageVersion" $)) -}}
|
||||||
|
{{- fail "ERROR: IngressClass cannot be used with Traefik < 2.3.0" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if semverCompare ">=1.19.0-0" .Capabilities.KubeVersion.Version -}}
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
{{- else if semverCompare ">=1.16.0-0" .Capabilities.KubeVersion.Version }}
|
||||||
|
apiVersion: networking.k8s.io/v1beta1
|
||||||
|
{{- else }}
|
||||||
|
{{- fail "ERROR: You must use at least Kubernetes v1.16 with this Chart" }}
|
||||||
|
{{- end }}
|
||||||
|
kind: IngressClass
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
ingressclass.kubernetes.io/is-default-class: {{ .Values.ingressClass.isDefaultClass | quote }}
|
||||||
|
labels:
|
||||||
|
{{- include "traefik.labels" . | nindent 4 }}
|
||||||
|
name: {{ .Values.ingressClass.name | default (include "traefik.fullname" .) }}
|
||||||
|
spec:
|
||||||
|
controller: traefik.io/ingress-controller
|
||||||
|
{{- end -}}
|
|
@ -0,0 +1,23 @@
|
||||||
|
{{- if .Values.podDisruptionBudget.enabled -}}
|
||||||
|
{{- if .Capabilities.APIVersions.Has "policy/v1/PodDisruptionBudget" }}
|
||||||
|
apiVersion: policy/v1
|
||||||
|
{{- else }}
|
||||||
|
apiVersion: policy/v1beta1
|
||||||
|
{{- end }}
|
||||||
|
kind: PodDisruptionBudget
|
||||||
|
metadata:
|
||||||
|
name: {{ template "traefik.fullname" . }}
|
||||||
|
namespace: {{ template "traefik.namespace" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "traefik.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "traefik.labelselector" . | nindent 6 }}
|
||||||
|
{{- if .Values.podDisruptionBudget.minAvailable }}
|
||||||
|
minAvailable: {{ .Values.podDisruptionBudget.minAvailable }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.podDisruptionBudget.maxUnavailable }}
|
||||||
|
maxUnavailable: {{ .Values.podDisruptionBudget.maxUnavailable }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end -}}
|
28
traefik/base/charts/traefik/templates/prometheusrules.yaml
Normal file
28
traefik/base/charts/traefik/templates/prometheusrules.yaml
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
{{- if .Values.metrics.prometheus }}
|
||||||
|
{{- if .Values.metrics.prometheus.prometheusRule }}
|
||||||
|
{{- if (not (.Capabilities.APIVersions.Has "monitoring.coreos.com/v1")) }}
|
||||||
|
{{- if (not (.Values.metrics.prometheus.disableAPICheck)) }}
|
||||||
|
{{- fail "ERROR: You have to deploy monitoring.coreos.com/v1 first" }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
apiVersion: monitoring.coreos.com/v1
|
||||||
|
kind: PrometheusRule
|
||||||
|
metadata:
|
||||||
|
name: {{ template "traefik.fullname" . }}
|
||||||
|
namespace: {{ .Values.metrics.prometheus.prometheusRule.namespace | default (include "traefik.namespace" .) }}
|
||||||
|
labels:
|
||||||
|
{{- include "traefik.labels" . | nindent 4 }}
|
||||||
|
{{- with .Values.metrics.prometheus.prometheusRule.additionalLabels }}
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
{{- if .Values.metrics.prometheus.prometheusRule.rules }}
|
||||||
|
groups:
|
||||||
|
- name: {{ template "traefik.name" $ }}
|
||||||
|
rules:
|
||||||
|
{{- with .Values.metrics.prometheus.prometheusRule.rules }}
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
12
traefik/base/charts/traefik/templates/provider-file-cm.yaml
Normal file
12
traefik/base/charts/traefik/templates/provider-file-cm.yaml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
{{- if .Values.providers.file.enabled -}}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: {{ template "traefik.fullname" . }}-file-provider
|
||||||
|
namespace: {{ template "traefik.namespace" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "traefik.labels" . | nindent 4 }}
|
||||||
|
data:
|
||||||
|
config.yml: |
|
||||||
|
{{ .Values.providers.file.content | nindent 4 }}
|
||||||
|
{{- end -}}
|
26
traefik/base/charts/traefik/templates/pvc.yaml
Normal file
26
traefik/base/charts/traefik/templates/pvc.yaml
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
{{- if and .Values.persistence.enabled (not .Values.persistence.existingClaim) -}}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: {{ template "traefik.fullname" . }}
|
||||||
|
namespace: {{ template "traefik.namespace" . }}
|
||||||
|
annotations:
|
||||||
|
{{- with .Values.persistence.annotations }}
|
||||||
|
{{ toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
helm.sh/resource-policy: keep
|
||||||
|
labels:
|
||||||
|
{{- include "traefik.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- {{ .Values.persistence.accessMode | quote }}
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: {{ .Values.persistence.size | quote }}
|
||||||
|
{{- if .Values.persistence.storageClass }}
|
||||||
|
storageClassName: {{ .Values.persistence.storageClass | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.persistence.volumeName }}
|
||||||
|
volumeName: {{ .Values.persistence.volumeName | quote }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end -}}
|
111
traefik/base/charts/traefik/templates/rbac/clusterrole.yaml
Normal file
111
traefik/base/charts/traefik/templates/rbac/clusterrole.yaml
Normal file
|
@ -0,0 +1,111 @@
|
||||||
|
{{- if and .Values.rbac.enabled (or .Values.providers.kubernetesIngress.enabled (not .Values.rbac.namespaced)) -}}
|
||||||
|
---
|
||||||
|
kind: ClusterRole
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
metadata:
|
||||||
|
name: {{ template "traefik.clusterRoleName" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "traefik.labels" . | nindent 4 }}
|
||||||
|
{{- range .Values.rbac.aggregateTo }}
|
||||||
|
rbac.authorization.k8s.io/aggregate-to-{{ . }}: "true"
|
||||||
|
{{- end }}
|
||||||
|
rules:
|
||||||
|
- apiGroups:
|
||||||
|
- extensions
|
||||||
|
- networking.k8s.io
|
||||||
|
resources:
|
||||||
|
- ingressclasses
|
||||||
|
{{- if not .Values.rbac.namespaced }}
|
||||||
|
- ingresses
|
||||||
|
{{- end }}
|
||||||
|
verbs:
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
- watch
|
||||||
|
{{- if not .Values.rbac.namespaced }}
|
||||||
|
- apiGroups:
|
||||||
|
- ""
|
||||||
|
resources:
|
||||||
|
- services
|
||||||
|
- endpoints
|
||||||
|
- secrets
|
||||||
|
verbs:
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
- watch
|
||||||
|
{{- if .Values.providers.kubernetesIngress.enabled }}
|
||||||
|
- apiGroups:
|
||||||
|
- extensions
|
||||||
|
- networking.k8s.io
|
||||||
|
resources:
|
||||||
|
- ingresses/status
|
||||||
|
verbs:
|
||||||
|
- update
|
||||||
|
{{- end -}}
|
||||||
|
{{- if .Values.providers.kubernetesCRD.enabled }}
|
||||||
|
- apiGroups:
|
||||||
|
- traefik.io
|
||||||
|
{{- if semverCompare "<3.0.0-0" (include "imageVersion" $) }}
|
||||||
|
- traefik.containo.us
|
||||||
|
{{- end }}
|
||||||
|
resources:
|
||||||
|
- ingressroutes
|
||||||
|
- ingressroutetcps
|
||||||
|
- ingressrouteudps
|
||||||
|
- middlewares
|
||||||
|
- middlewaretcps
|
||||||
|
- tlsoptions
|
||||||
|
- tlsstores
|
||||||
|
- traefikservices
|
||||||
|
- serverstransports
|
||||||
|
{{- if semverCompare ">=3.0.0-0" (include "imageVersion" $) }}
|
||||||
|
- serverstransporttcps
|
||||||
|
{{- end }}
|
||||||
|
verbs:
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
- watch
|
||||||
|
{{- end -}}
|
||||||
|
{{- if .Values.podSecurityPolicy.enabled }}
|
||||||
|
- apiGroups:
|
||||||
|
- policy
|
||||||
|
resourceNames:
|
||||||
|
- {{ template "traefik.fullname" . }}
|
||||||
|
resources:
|
||||||
|
- podsecuritypolicies
|
||||||
|
verbs:
|
||||||
|
- use
|
||||||
|
{{- end -}}
|
||||||
|
{{- if .Values.experimental.kubernetesGateway.enabled }}
|
||||||
|
- apiGroups:
|
||||||
|
- ""
|
||||||
|
resources:
|
||||||
|
- namespaces
|
||||||
|
verbs:
|
||||||
|
- list
|
||||||
|
- watch
|
||||||
|
- apiGroups:
|
||||||
|
- gateway.networking.k8s.io
|
||||||
|
resources:
|
||||||
|
- gatewayclasses
|
||||||
|
- gateways
|
||||||
|
- httproutes
|
||||||
|
- tcproutes
|
||||||
|
- tlsroutes
|
||||||
|
verbs:
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
- watch
|
||||||
|
- apiGroups:
|
||||||
|
- gateway.networking.k8s.io
|
||||||
|
resources:
|
||||||
|
- gatewayclasses/status
|
||||||
|
- gateways/status
|
||||||
|
- httproutes/status
|
||||||
|
- tcproutes/status
|
||||||
|
- tlsroutes/status
|
||||||
|
verbs:
|
||||||
|
- update
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
|
@ -0,0 +1,17 @@
|
||||||
|
{{- if and .Values.rbac.enabled (or .Values.providers.kubernetesIngress.enabled (not .Values.rbac.namespaced)) -}}
|
||||||
|
---
|
||||||
|
kind: ClusterRoleBinding
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
metadata:
|
||||||
|
name: {{ template "traefik.clusterRoleName" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "traefik.labels" . | nindent 4 }}
|
||||||
|
roleRef:
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: ClusterRole
|
||||||
|
name: {{ template "traefik.clusterRoleName" . }}
|
||||||
|
subjects:
|
||||||
|
- kind: ServiceAccount
|
||||||
|
name: {{ include "traefik.serviceAccountName" . }}
|
||||||
|
namespace: {{ template "traefik.namespace" . }}
|
||||||
|
{{- end -}}
|
|
@ -0,0 +1,68 @@
|
||||||
|
{{- if .Values.podSecurityPolicy.enabled }}
|
||||||
|
{{- if semverCompare ">=1.25.0-0" .Capabilities.KubeVersion.Version }}
|
||||||
|
{{- fail "ERROR: PodSecurityPolicy has been removed in Kubernetes v1.25+" }}
|
||||||
|
{{- end }}
|
||||||
|
---
|
||||||
|
apiVersion: policy/v1beta1
|
||||||
|
kind: PodSecurityPolicy
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
seccomp.security.alpha.kubernetes.io/allowedProfileNames: runtime/default
|
||||||
|
seccomp.security.alpha.kubernetes.io/defaultProfileName: runtime/default
|
||||||
|
name: {{ template "traefik.fullname" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "traefik.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
privileged: false
|
||||||
|
allowPrivilegeEscalation: false
|
||||||
|
requiredDropCapabilities:
|
||||||
|
- ALL
|
||||||
|
{{- if not .Values.securityContext.runAsNonRoot }}
|
||||||
|
allowedCapabilities:
|
||||||
|
- NET_BIND_SERVICE
|
||||||
|
{{- end }}
|
||||||
|
hostNetwork: {{ .Values.hostNetwork }}
|
||||||
|
hostIPC: false
|
||||||
|
hostPID: false
|
||||||
|
fsGroup:
|
||||||
|
{{- if .Values.securityContext.runAsNonRoot }}
|
||||||
|
ranges:
|
||||||
|
- max: 65535
|
||||||
|
min: 1
|
||||||
|
rule: MustRunAs
|
||||||
|
{{- else }}
|
||||||
|
rule: RunAsAny
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.hostNetwork }}
|
||||||
|
hostPorts:
|
||||||
|
- max: 65535
|
||||||
|
min: 1
|
||||||
|
{{- end }}
|
||||||
|
readOnlyRootFilesystem: true
|
||||||
|
runAsUser:
|
||||||
|
{{- if .Values.securityContext.runAsNonRoot }}
|
||||||
|
rule: MustRunAsNonRoot
|
||||||
|
{{- else }}
|
||||||
|
rule: RunAsAny
|
||||||
|
{{- end }}
|
||||||
|
seLinux:
|
||||||
|
rule: RunAsAny
|
||||||
|
supplementalGroups:
|
||||||
|
{{- if .Values.securityContext.runAsNonRoot }}
|
||||||
|
ranges:
|
||||||
|
- max: 65535
|
||||||
|
min: 1
|
||||||
|
rule: MustRunAs
|
||||||
|
{{- else }}
|
||||||
|
rule: RunAsAny
|
||||||
|
{{- end }}
|
||||||
|
volumes:
|
||||||
|
- configMap
|
||||||
|
- downwardAPI
|
||||||
|
- secret
|
||||||
|
- emptyDir
|
||||||
|
- projected
|
||||||
|
{{- if .Values.persistence.enabled }}
|
||||||
|
- persistentVolumeClaim
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
79
traefik/base/charts/traefik/templates/rbac/role.yaml
Normal file
79
traefik/base/charts/traefik/templates/rbac/role.yaml
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
{{- $ingressNamespaces := default (include "traefik.namespace" . | list) .Values.providers.kubernetesIngress.namespaces -}}
|
||||||
|
{{- $CRDNamespaces := default (include "traefik.namespace" . | list) .Values.providers.kubernetesCRD.namespaces -}}
|
||||||
|
{{- $allNamespaces := uniq (concat $ingressNamespaces $CRDNamespaces) -}}
|
||||||
|
|
||||||
|
{{- if and .Values.rbac.enabled .Values.rbac.namespaced -}}
|
||||||
|
{{- range $allNamespaces }}
|
||||||
|
---
|
||||||
|
kind: Role
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
metadata:
|
||||||
|
name: {{ template "traefik.fullname" $ }}
|
||||||
|
namespace: {{ . }}
|
||||||
|
labels:
|
||||||
|
{{- include "traefik.labels" $ | nindent 4 }}
|
||||||
|
rules:
|
||||||
|
- apiGroups:
|
||||||
|
- ""
|
||||||
|
resources:
|
||||||
|
- services
|
||||||
|
- endpoints
|
||||||
|
- secrets
|
||||||
|
verbs:
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
- watch
|
||||||
|
{{- if (and (has . $ingressNamespaces) $.Values.providers.kubernetesIngress.enabled) }}
|
||||||
|
- apiGroups:
|
||||||
|
- extensions
|
||||||
|
- networking.k8s.io
|
||||||
|
resources:
|
||||||
|
- ingresses
|
||||||
|
verbs:
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
- watch
|
||||||
|
- apiGroups:
|
||||||
|
- extensions
|
||||||
|
- networking.k8s.io
|
||||||
|
resources:
|
||||||
|
- ingresses/status
|
||||||
|
verbs:
|
||||||
|
- update
|
||||||
|
{{- end -}}
|
||||||
|
{{- if (and (has . $CRDNamespaces) $.Values.providers.kubernetesCRD.enabled) }}
|
||||||
|
- apiGroups:
|
||||||
|
- traefik.io
|
||||||
|
{{- if semverCompare "<3.0.0-0" (include "imageVersion" $) }}
|
||||||
|
- traefik.containo.us
|
||||||
|
{{- end }}
|
||||||
|
resources:
|
||||||
|
- ingressroutes
|
||||||
|
- ingressroutetcps
|
||||||
|
- ingressrouteudps
|
||||||
|
- middlewares
|
||||||
|
- middlewaretcps
|
||||||
|
- tlsoptions
|
||||||
|
- tlsstores
|
||||||
|
- traefikservices
|
||||||
|
- serverstransports
|
||||||
|
{{- if semverCompare ">=3.0.0-0" (include "imageVersion" $) }}
|
||||||
|
- serverstransporttcps
|
||||||
|
{{- end }}
|
||||||
|
verbs:
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
- watch
|
||||||
|
{{- end -}}
|
||||||
|
{{- if $.Values.podSecurityPolicy.enabled }}
|
||||||
|
- apiGroups:
|
||||||
|
- extensions
|
||||||
|
resourceNames:
|
||||||
|
- {{ template "traefik.fullname" $ }}
|
||||||
|
resources:
|
||||||
|
- podsecuritypolicies
|
||||||
|
verbs:
|
||||||
|
- use
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
24
traefik/base/charts/traefik/templates/rbac/rolebinding.yaml
Normal file
24
traefik/base/charts/traefik/templates/rbac/rolebinding.yaml
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
{{- $ingressNamespaces := default (include "traefik.namespace" . | list) .Values.providers.kubernetesIngress.namespaces -}}
|
||||||
|
{{- $CRDNamespaces := default (include "traefik.namespace" . | list) .Values.providers.kubernetesCRD.namespaces -}}
|
||||||
|
{{- $allNamespaces := uniq (concat $ingressNamespaces $CRDNamespaces) -}}
|
||||||
|
|
||||||
|
{{- if and .Values.rbac.enabled .Values.rbac.namespaced }}
|
||||||
|
{{- range $allNamespaces }}
|
||||||
|
---
|
||||||
|
kind: RoleBinding
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
metadata:
|
||||||
|
name: {{ template "traefik.fullname" $ }}
|
||||||
|
namespace: {{ . }}
|
||||||
|
labels:
|
||||||
|
{{- include "traefik.labels" $ | nindent 4 }}
|
||||||
|
roleRef:
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
|
kind: Role
|
||||||
|
name: {{ template "traefik.fullname" $ }}
|
||||||
|
subjects:
|
||||||
|
- kind: ServiceAccount
|
||||||
|
name: {{ include "traefik.serviceAccountName" $ }}
|
||||||
|
namespace: {{ template "traefik.namespace" $ }}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
|
@ -0,0 +1,13 @@
|
||||||
|
{{- if not .Values.serviceAccount.name -}}
|
||||||
|
kind: ServiceAccount
|
||||||
|
apiVersion: v1
|
||||||
|
metadata:
|
||||||
|
name: {{ include "traefik.serviceAccountName" . }}
|
||||||
|
namespace: {{ template "traefik.namespace" . }}
|
||||||
|
labels:
|
||||||
|
{{- include "traefik.labels" . | nindent 4 }}
|
||||||
|
annotations:
|
||||||
|
{{- with .Values.serviceAccountAnnotations }}
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end -}}
|
58
traefik/base/charts/traefik/templates/service-internal.yaml
Normal file
58
traefik/base/charts/traefik/templates/service-internal.yaml
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
{{- if .Values.service.internal -}}
|
||||||
|
|
||||||
|
{{- $fullname := include "traefik.fullname" . }}
|
||||||
|
{{- if ge (len $fullname) 50 }}
|
||||||
|
{{- fail "ERROR: Cannot create an internal service when name contains more than 50 characters" }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- $tcpPorts := dict -}}
|
||||||
|
{{- $udpPorts := dict -}}
|
||||||
|
{{- $exposedPorts := false -}}
|
||||||
|
{{- range $name, $config := .Values.ports -}}
|
||||||
|
{{- if eq (toString $config.protocol) "UDP" -}}
|
||||||
|
{{ $_ := set $udpPorts $name $config -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if eq (toString (default "TCP" $config.protocol)) "TCP" -}}
|
||||||
|
{{ $_ := set $tcpPorts $name $config -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if (or $tcpPorts .Values.service.single) }}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: {{ $fullname}}-internal
|
||||||
|
namespace: {{ template "traefik.namespace" . }}
|
||||||
|
{{- template "traefik.service-internal-metadata" . }}
|
||||||
|
annotations:
|
||||||
|
{{- with .Values.service.internal.annotations }}
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
{{- template "traefik.service-internal-spec" . }}
|
||||||
|
ports:
|
||||||
|
{{- template "traefik.service-internal-ports" $tcpPorts }}
|
||||||
|
{{- if .Values.service.single }}
|
||||||
|
{{- template "traefik.service-internal-ports" $udpPorts }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- if (and $udpPorts (not .Values.service.single)) }}
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: {{ $fullname }}-internal-udp
|
||||||
|
namespace: {{ template "traefik.namespace" . }}
|
||||||
|
{{- template "traefik.service-internal-metadata" . }}
|
||||||
|
annotations:
|
||||||
|
{{- with .Values.service.internal.annotations }}
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
{{- template "traefik.service-internal-spec" . }}
|
||||||
|
ports:
|
||||||
|
{{- template "traefik.service-internal-ports" $udpPorts }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- end -}}
|
33
traefik/base/charts/traefik/templates/service-metrics.yaml
Normal file
33
traefik/base/charts/traefik/templates/service-metrics.yaml
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
{{- if .Values.metrics.prometheus }}
|
||||||
|
{{- if .Values.metrics.prometheus.service }}
|
||||||
|
{{- if (.Values.metrics.prometheus.service).enabled -}}
|
||||||
|
|
||||||
|
{{- $fullname := include "traefik.fullname" . }}
|
||||||
|
{{- if ge (len $fullname) 50 }}
|
||||||
|
{{- fail "ERROR: Cannot create a metrics service when name contains more than 50 characters" }}
|
||||||
|
{{- end }}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: {{ $fullname }}-metrics
|
||||||
|
namespace: {{ template "traefik.namespace" . }}
|
||||||
|
{{- template "traefik.metrics-service-metadata" . }}
|
||||||
|
annotations:
|
||||||
|
{{- with .Values.metrics.prometheus.service.annotations }}
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
type: ClusterIP
|
||||||
|
selector:
|
||||||
|
{{- include "traefik.labelselector" . | nindent 4 }}
|
||||||
|
ports:
|
||||||
|
- port: {{ .Values.ports.metrics.port }}
|
||||||
|
name: "metrics"
|
||||||
|
targetPort: metrics
|
||||||
|
protocol: TCP
|
||||||
|
{{- if .Values.ports.metrics.nodePort }}
|
||||||
|
nodePort: {{ .Values.ports.metrics.nodePort }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
69
traefik/base/charts/traefik/templates/service.yaml
Normal file
69
traefik/base/charts/traefik/templates/service.yaml
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
{{- if .Values.service.enabled -}}
|
||||||
|
|
||||||
|
{{- $tcpPorts := dict -}}
|
||||||
|
{{- $udpPorts := dict -}}
|
||||||
|
{{- $exposedPorts := false -}}
|
||||||
|
{{- range $name, $config := .Values.ports -}}
|
||||||
|
{{- if $config -}}
|
||||||
|
{{- if $config.http3 -}}
|
||||||
|
{{- if $config.http3.enabled -}}
|
||||||
|
{{- if (not $config.tls.enabled) -}}
|
||||||
|
{{- fail "ERROR: You cannot enable http3 without enabling tls" -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if eq (toString $config.protocol) "UDP" -}}
|
||||||
|
{{ $_ := set $udpPorts $name $config -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if eq (toString (default "TCP" $config.protocol)) "TCP" -}}
|
||||||
|
{{ $_ := set $tcpPorts $name $config -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- if (eq $config.expose true) -}}
|
||||||
|
{{- $exposedPorts = true -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if (eq $exposedPorts false) -}}
|
||||||
|
{{- fail "You need to expose at least one port or set enabled=false to service" -}}
|
||||||
|
{{- end -}}
|
||||||
|
|
||||||
|
{{- if and $exposedPorts (or $tcpPorts .Values.service.single) }}
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: {{ template "traefik.fullname" . }}
|
||||||
|
namespace: {{ template "traefik.namespace" . }}
|
||||||
|
{{- template "traefik.service-metadata" . }}
|
||||||
|
annotations:
|
||||||
|
{{- with (merge dict .Values.service.annotationsTCP .Values.service.annotations) }}
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
{{- template "traefik.service-spec" . }}
|
||||||
|
ports:
|
||||||
|
{{- template "traefik.service-ports" $tcpPorts }}
|
||||||
|
{{- if .Values.service.single }}
|
||||||
|
{{- template "traefik.service-ports" $udpPorts }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- if and $exposedPorts (and $udpPorts (not .Values.service.single)) }}
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: {{ template "traefik.fullname" . }}-udp
|
||||||
|
namespace: {{ template "traefik.namespace" . }}
|
||||||
|
{{- template "traefik.service-metadata" . }}
|
||||||
|
annotations:
|
||||||
|
{{- with (merge dict .Values.service.annotationsUDP .Values.service.annotations) }}
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
{{- template "traefik.service-spec" . }}
|
||||||
|
ports:
|
||||||
|
{{- template "traefik.service-ports" $udpPorts }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- end -}}
|
69
traefik/base/charts/traefik/templates/servicemonitor.yaml
Normal file
69
traefik/base/charts/traefik/templates/servicemonitor.yaml
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
{{- if .Values.metrics.prometheus }}
|
||||||
|
{{- if .Values.metrics.prometheus.serviceMonitor }}
|
||||||
|
{{- if (not (.Capabilities.APIVersions.Has "monitoring.coreos.com/v1")) }}
|
||||||
|
{{- if (not (.Values.metrics.prometheus.disableAPICheck)) }}
|
||||||
|
{{- fail "ERROR: You have to deploy monitoring.coreos.com/v1 first" }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
apiVersion: monitoring.coreos.com/v1
|
||||||
|
kind: ServiceMonitor
|
||||||
|
metadata:
|
||||||
|
name: {{ template "traefik.fullname" . }}
|
||||||
|
namespace: {{ .Values.metrics.prometheus.serviceMonitor.namespace | default (include "traefik.namespace" .) }}
|
||||||
|
labels:
|
||||||
|
{{- if (.Values.metrics.prometheus.service).enabled }}
|
||||||
|
{{- include "traefik.metricsservicelabels" . | nindent 4 }}
|
||||||
|
{{- else }}
|
||||||
|
{{- include "traefik.labels" . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.metrics.prometheus.serviceMonitor.additionalLabels }}
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
jobLabel: {{ .Values.metrics.prometheus.serviceMonitor.jobLabel | default .Release.Name }}
|
||||||
|
endpoints:
|
||||||
|
- targetPort: metrics
|
||||||
|
path: /{{ .Values.metrics.prometheus.entryPoint }}
|
||||||
|
{{- with .Values.metrics.prometheus.serviceMonitor.honorLabels }}
|
||||||
|
honorLabels: {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.metrics.prometheus.serviceMonitor.honorTimestamps }}
|
||||||
|
honorTimestamps: {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.metrics.prometheus.serviceMonitor.enableHttp2 }}
|
||||||
|
enableHttp2: {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.metrics.prometheus.serviceMonitor.followRedirects }}
|
||||||
|
followRedirects: {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.metrics.prometheus.serviceMonitor.interval }}
|
||||||
|
interval: {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with .Values.metrics.prometheus.serviceMonitor.scrapeTimeout }}
|
||||||
|
scrapeTimeout: {{ . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.metrics.prometheus.serviceMonitor.metricRelabelings }}
|
||||||
|
metricRelabelings:
|
||||||
|
{{ tpl (toYaml .Values.metrics.prometheus.serviceMonitor.metricRelabelings | indent 6) . }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.metrics.prometheus.serviceMonitor.relabelings }}
|
||||||
|
relabelings:
|
||||||
|
{{ toYaml .Values.metrics.prometheus.serviceMonitor.relabelings | indent 6 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if .Values.metrics.prometheus.serviceMonitor.namespaceSelector }}
|
||||||
|
namespaceSelector:
|
||||||
|
{{ toYaml .Values.metrics.prometheus.serviceMonitor.namespaceSelector | indent 4 -}}
|
||||||
|
{{ else }}
|
||||||
|
namespaceSelector:
|
||||||
|
matchNames:
|
||||||
|
- {{ template "traefik.namespace" . }}
|
||||||
|
{{- end }}
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- if (.Values.metrics.prometheus.service).enabled }}
|
||||||
|
{{- include "traefik.metricslabelselector" . | nindent 6 }}
|
||||||
|
{{- else }}
|
||||||
|
{{- include "traefik.labelselector" . | nindent 6 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
42
traefik/base/charts/traefik/templates/tlsoption.yaml
Normal file
42
traefik/base/charts/traefik/templates/tlsoption.yaml
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
{{- range $name, $config := .Values.tlsOptions }}
|
||||||
|
apiVersion: traefik.io/v1alpha1
|
||||||
|
kind: TLSOption
|
||||||
|
metadata:
|
||||||
|
name: {{ $name }}
|
||||||
|
namespace: {{ template "traefik.namespace" $ }}
|
||||||
|
labels:
|
||||||
|
{{- include "traefik.labels" $ | nindent 4 }}
|
||||||
|
{{- with $config.labels }}
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
{{- with $config.alpnProtocols }}
|
||||||
|
alpnProtocols:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with $config.cipherSuites }}
|
||||||
|
cipherSuites:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with $config.clientAuth }}
|
||||||
|
clientAuth:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with $config.curvePreferences }}
|
||||||
|
curvePreferences:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if $config.maxVersion }}
|
||||||
|
maxVersion: {{ $config.maxVersion }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if $config.minVersion }}
|
||||||
|
minVersion: {{ $config.minVersion }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if $config.preferServerCipherSuites }}
|
||||||
|
preferServerCipherSuites: {{ $config.preferServerCipherSuites }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if $config.sniStrict }}
|
||||||
|
sniStrict: {{ $config.sniStrict }}
|
||||||
|
{{- end }}
|
||||||
|
---
|
||||||
|
{{- end -}}
|
12
traefik/base/charts/traefik/templates/tlsstore.yaml
Normal file
12
traefik/base/charts/traefik/templates/tlsstore.yaml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
{{- range $name, $config := .Values.tlsStore }}
|
||||||
|
apiVersion: traefik.io/v1alpha1
|
||||||
|
kind: TLSStore
|
||||||
|
metadata:
|
||||||
|
name: {{ $name }}
|
||||||
|
namespace: {{ template "traefik.namespace" $ }}
|
||||||
|
labels:
|
||||||
|
{{- include "traefik.labels" $ | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
{{- toYaml $config | nindent 2 }}
|
||||||
|
---
|
||||||
|
{{- end -}}
|
996
traefik/base/charts/traefik/values.yaml
Normal file
996
traefik/base/charts/traefik/values.yaml
Normal file
|
@ -0,0 +1,996 @@
|
||||||
|
# Default values for Traefik
|
||||||
|
image:
|
||||||
|
# -- Traefik image host registry
|
||||||
|
registry: docker.io
|
||||||
|
# -- Traefik image repository
|
||||||
|
repository: traefik
|
||||||
|
# -- defaults to appVersion
|
||||||
|
tag: ""
|
||||||
|
# -- Traefik image pull policy
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
|
||||||
|
# -- Add additional label to all resources
|
||||||
|
commonLabels: {}
|
||||||
|
|
||||||
|
#
|
||||||
|
# Configure the deployment
|
||||||
|
#
|
||||||
|
deployment:
|
||||||
|
# -- Enable deployment
|
||||||
|
enabled: true
|
||||||
|
# -- Deployment or DaemonSet
|
||||||
|
kind: Deployment
|
||||||
|
# -- Number of pods of the deployment (only applies when kind == Deployment)
|
||||||
|
replicas: 1
|
||||||
|
# -- Number of old history to retain to allow rollback (If not set, default Kubernetes value is set to 10)
|
||||||
|
# revisionHistoryLimit: 1
|
||||||
|
# -- Amount of time (in seconds) before Kubernetes will send the SIGKILL signal if Traefik does not shut down
|
||||||
|
terminationGracePeriodSeconds: 60
|
||||||
|
# -- The minimum number of seconds Traefik needs to be up and running before the DaemonSet/Deployment controller considers it available
|
||||||
|
minReadySeconds: 0
|
||||||
|
## Override the liveness/readiness port. This is useful to integrate traefik
|
||||||
|
## with an external Load Balancer that performs healthchecks.
|
||||||
|
## Default: ports.traefik.port
|
||||||
|
# healthchecksPort: 9000
|
||||||
|
## Override the liveness/readiness scheme. Useful for getting ping to
|
||||||
|
## respond on websecure entryPoint.
|
||||||
|
# healthchecksScheme: HTTPS
|
||||||
|
# -- Additional deployment annotations (e.g. for jaeger-operator sidecar injection)
|
||||||
|
annotations: {}
|
||||||
|
# -- Additional deployment labels (e.g. for filtering deployment by custom labels)
|
||||||
|
labels: {}
|
||||||
|
# -- Additional pod annotations (e.g. for mesh injection or prometheus scraping)
|
||||||
|
# It supports templating. One can set it with values like traefik/name: '{{ template "traefik.name" . }}'
|
||||||
|
podAnnotations: {}
|
||||||
|
# -- Additional Pod labels (e.g. for filtering Pod by custom labels)
|
||||||
|
podLabels: {}
|
||||||
|
# -- Additional containers (e.g. for metric offloading sidecars)
|
||||||
|
additionalContainers: []
|
||||||
|
# https://docs.datadoghq.com/developers/dogstatsd/unix_socket/?tab=host
|
||||||
|
# - name: socat-proxy
|
||||||
|
# image: alpine/socat:1.0.5
|
||||||
|
# args: ["-s", "-u", "udp-recv:8125", "unix-sendto:/socket/socket"]
|
||||||
|
# volumeMounts:
|
||||||
|
# - name: dsdsocket
|
||||||
|
# mountPath: /socket
|
||||||
|
# -- Additional volumes available for use with initContainers and additionalContainers
|
||||||
|
additionalVolumes: []
|
||||||
|
# - name: dsdsocket
|
||||||
|
# hostPath:
|
||||||
|
# path: /var/run/statsd-exporter
|
||||||
|
# -- Additional initContainers (e.g. for setting file permission as shown below)
|
||||||
|
initContainers: []
|
||||||
|
# The "volume-permissions" init container is required if you run into permission issues.
|
||||||
|
# Related issue: https://github.com/traefik/traefik-helm-chart/issues/396
|
||||||
|
# - name: volume-permissions
|
||||||
|
# image: busybox:latest
|
||||||
|
# command: ["sh", "-c", "touch /data/acme.json; chmod -v 600 /data/acme.json"]
|
||||||
|
# securityContext:
|
||||||
|
# runAsNonRoot: true
|
||||||
|
# runAsGroup: 65532
|
||||||
|
# runAsUser: 65532
|
||||||
|
# volumeMounts:
|
||||||
|
# - name: data
|
||||||
|
# mountPath: /data
|
||||||
|
# -- Use process namespace sharing
|
||||||
|
shareProcessNamespace: false
|
||||||
|
# -- Custom pod DNS policy. Apply if `hostNetwork: true`
|
||||||
|
# dnsPolicy: ClusterFirstWithHostNet
|
||||||
|
dnsConfig: {}
|
||||||
|
# nameservers:
|
||||||
|
# - 192.0.2.1 # this is an example
|
||||||
|
# searches:
|
||||||
|
# - ns1.svc.cluster-domain.example
|
||||||
|
# - my.dns.search.suffix
|
||||||
|
# options:
|
||||||
|
# - name: ndots
|
||||||
|
# value: "2"
|
||||||
|
# - name: edns0
|
||||||
|
# -- Additional imagePullSecrets
|
||||||
|
imagePullSecrets: []
|
||||||
|
# - name: myRegistryKeySecretName
|
||||||
|
# -- Pod lifecycle actions
|
||||||
|
lifecycle: {}
|
||||||
|
# preStop:
|
||||||
|
# exec:
|
||||||
|
# command: ["/bin/sh", "-c", "sleep 40"]
|
||||||
|
# postStart:
|
||||||
|
# httpGet:
|
||||||
|
# path: /ping
|
||||||
|
# port: 9000
|
||||||
|
# host: localhost
|
||||||
|
# scheme: HTTP
|
||||||
|
# -- Set a runtimeClassName on pod
|
||||||
|
runtimeClassName:
|
||||||
|
|
||||||
|
# -- Pod disruption budget
|
||||||
|
podDisruptionBudget:
|
||||||
|
enabled: false
|
||||||
|
# maxUnavailable: 1
|
||||||
|
# maxUnavailable: 33%
|
||||||
|
# minAvailable: 0
|
||||||
|
# minAvailable: 25%
|
||||||
|
|
||||||
|
# -- Create a default IngressClass for Traefik
|
||||||
|
ingressClass:
|
||||||
|
enabled: true
|
||||||
|
isDefaultClass: true
|
||||||
|
# name: my-custom-class
|
||||||
|
|
||||||
|
# Traefik experimental features
|
||||||
|
experimental:
|
||||||
|
# This value is no longer used, set the image.tag to a semver higher than 3.0, e.g. "v3.0.0-beta3"
|
||||||
|
# v3:
|
||||||
|
# -- Enable traefik version 3
|
||||||
|
|
||||||
|
# -- Enable traefik experimental plugins
|
||||||
|
plugins: {}
|
||||||
|
# demo:
|
||||||
|
# moduleName: github.com/traefik/plugindemo
|
||||||
|
# version: v0.2.1
|
||||||
|
kubernetesGateway:
|
||||||
|
# -- Enable traefik experimental GatewayClass CRD
|
||||||
|
enabled: false
|
||||||
|
## Routes are restricted to namespace of the gateway by default.
|
||||||
|
## https://gateway-api.sigs.k8s.io/references/spec/#gateway.networking.k8s.io/v1beta1.FromNamespaces
|
||||||
|
# namespacePolicy: All
|
||||||
|
# certificate:
|
||||||
|
# group: "core"
|
||||||
|
# kind: "Secret"
|
||||||
|
# name: "mysecret"
|
||||||
|
# -- By default, Gateway would be created to the Namespace you are deploying Traefik to.
|
||||||
|
# You may create that Gateway in another namespace, setting its name below:
|
||||||
|
# namespace: default
|
||||||
|
# Additional gateway annotations (e.g. for cert-manager.io/issuer)
|
||||||
|
# annotations:
|
||||||
|
# cert-manager.io/issuer: letsencrypt
|
||||||
|
|
||||||
|
## Create an IngressRoute for the dashboard
|
||||||
|
ingressRoute:
|
||||||
|
dashboard:
|
||||||
|
# -- Create an IngressRoute for the dashboard
|
||||||
|
enabled: true
|
||||||
|
# -- Additional ingressRoute annotations (e.g. for kubernetes.io/ingress.class)
|
||||||
|
annotations: {}
|
||||||
|
# -- Additional ingressRoute labels (e.g. for filtering IngressRoute by custom labels)
|
||||||
|
labels: {}
|
||||||
|
# -- The router match rule used for the dashboard ingressRoute
|
||||||
|
matchRule: PathPrefix(`/dashboard`) || PathPrefix(`/api`)
|
||||||
|
# -- Specify the allowed entrypoints to use for the dashboard ingress route, (e.g. traefik, web, websecure).
|
||||||
|
# By default, it's using traefik entrypoint, which is not exposed.
|
||||||
|
# /!\ Do not expose your dashboard without any protection over the internet /!\
|
||||||
|
entryPoints: ["traefik"]
|
||||||
|
# -- Additional ingressRoute middlewares (e.g. for authentication)
|
||||||
|
middlewares: []
|
||||||
|
# -- TLS options (e.g. secret containing certificate)
|
||||||
|
tls: {}
|
||||||
|
healthcheck:
|
||||||
|
# -- Create an IngressRoute for the healthcheck probe
|
||||||
|
enabled: false
|
||||||
|
# -- Additional ingressRoute annotations (e.g. for kubernetes.io/ingress.class)
|
||||||
|
annotations: {}
|
||||||
|
# -- Additional ingressRoute labels (e.g. for filtering IngressRoute by custom labels)
|
||||||
|
labels: {}
|
||||||
|
# -- The router match rule used for the healthcheck ingressRoute
|
||||||
|
matchRule: PathPrefix(`/ping`)
|
||||||
|
# -- Specify the allowed entrypoints to use for the healthcheck ingress route, (e.g. traefik, web, websecure).
|
||||||
|
# By default, it's using traefik entrypoint, which is not exposed.
|
||||||
|
entryPoints: ["traefik"]
|
||||||
|
# -- Additional ingressRoute middlewares (e.g. for authentication)
|
||||||
|
middlewares: []
|
||||||
|
# -- TLS options (e.g. secret containing certificate)
|
||||||
|
tls: {}
|
||||||
|
|
||||||
|
updateStrategy:
|
||||||
|
# -- Customize updateStrategy: RollingUpdate or OnDelete
|
||||||
|
type: RollingUpdate
|
||||||
|
rollingUpdate:
|
||||||
|
maxUnavailable: 0
|
||||||
|
maxSurge: 1
|
||||||
|
|
||||||
|
readinessProbe:
|
||||||
|
# -- The number of consecutive failures allowed before considering the probe as failed.
|
||||||
|
failureThreshold: 1
|
||||||
|
# -- The number of seconds to wait before starting the first probe.
|
||||||
|
initialDelaySeconds: 2
|
||||||
|
# -- The number of seconds to wait between consecutive probes.
|
||||||
|
periodSeconds: 10
|
||||||
|
# -- The minimum consecutive successes required to consider the probe successful.
|
||||||
|
successThreshold: 1
|
||||||
|
# -- The number of seconds to wait for a probe response before considering it as failed.
|
||||||
|
timeoutSeconds: 2
|
||||||
|
livenessProbe:
|
||||||
|
# -- The number of consecutive failures allowed before considering the probe as failed.
|
||||||
|
failureThreshold: 3
|
||||||
|
# -- The number of seconds to wait before starting the first probe.
|
||||||
|
initialDelaySeconds: 2
|
||||||
|
# -- The number of seconds to wait between consecutive probes.
|
||||||
|
periodSeconds: 10
|
||||||
|
# -- The minimum consecutive successes required to consider the probe successful.
|
||||||
|
successThreshold: 1
|
||||||
|
# -- The number of seconds to wait for a probe response before considering it as failed.
|
||||||
|
timeoutSeconds: 2
|
||||||
|
|
||||||
|
# -- Define Startup Probe for container: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#define-startup-probes
|
||||||
|
# eg.
|
||||||
|
# `startupProbe:
|
||||||
|
# exec:
|
||||||
|
# command:
|
||||||
|
# - mycommand
|
||||||
|
# - foo
|
||||||
|
# initialDelaySeconds: 5
|
||||||
|
# periodSeconds: 5`
|
||||||
|
startupProbe:
|
||||||
|
|
||||||
|
providers:
|
||||||
|
kubernetesCRD:
|
||||||
|
# -- Load Kubernetes IngressRoute provider
|
||||||
|
enabled: true
|
||||||
|
# -- Allows IngressRoute to reference resources in namespace other than theirs
|
||||||
|
allowCrossNamespace: false
|
||||||
|
# -- Allows to reference ExternalName services in IngressRoute
|
||||||
|
allowExternalNameServices: false
|
||||||
|
# -- Allows to return 503 when there is no endpoints available
|
||||||
|
allowEmptyServices: false
|
||||||
|
# ingressClass: traefik-internal
|
||||||
|
# labelSelector: environment=production,method=traefik
|
||||||
|
# -- Array of namespaces to watch. If left empty, Traefik watches all namespaces.
|
||||||
|
namespaces: []
|
||||||
|
# - "default"
|
||||||
|
|
||||||
|
kubernetesIngress:
|
||||||
|
# -- Load Kubernetes Ingress provider
|
||||||
|
enabled: true
|
||||||
|
# -- Allows to reference ExternalName services in Ingress
|
||||||
|
allowExternalNameServices: false
|
||||||
|
# -- Allows to return 503 when there is no endpoints available
|
||||||
|
allowEmptyServices: false
|
||||||
|
# ingressClass: traefik-internal
|
||||||
|
# labelSelector: environment=production,method=traefik
|
||||||
|
# -- Array of namespaces to watch. If left empty, Traefik watches all namespaces.
|
||||||
|
namespaces: []
|
||||||
|
# - "default"
|
||||||
|
# IP used for Kubernetes Ingress endpoints
|
||||||
|
publishedService:
|
||||||
|
enabled: false
|
||||||
|
# Published Kubernetes Service to copy status from. Format: namespace/servicename
|
||||||
|
# By default this Traefik service
|
||||||
|
# pathOverride: ""
|
||||||
|
|
||||||
|
file:
|
||||||
|
# -- Create a file provider
|
||||||
|
enabled: false
|
||||||
|
# -- Allows Traefik to automatically watch for file changes
|
||||||
|
watch: true
|
||||||
|
# -- File content (YAML format, go template supported) (see https://doc.traefik.io/traefik/providers/file/)
|
||||||
|
content: ""
|
||||||
|
# http:
|
||||||
|
# routers:
|
||||||
|
# router0:
|
||||||
|
# entryPoints:
|
||||||
|
# - web
|
||||||
|
# middlewares:
|
||||||
|
# - my-basic-auth
|
||||||
|
# service: service-foo
|
||||||
|
# rule: Path(`/foo`)
|
||||||
|
|
||||||
|
#
|
||||||
|
# -- Add volumes to the traefik pod. The volume name will be passed to tpl.
|
||||||
|
# This can be used to mount a cert pair or a configmap that holds a config.toml file.
|
||||||
|
# After the volume has been mounted, add the configs into traefik by using the `additionalArguments` list below, eg:
|
||||||
|
# `additionalArguments:
|
||||||
|
# - "--providers.file.filename=/config/dynamic.toml"
|
||||||
|
# - "--ping"
|
||||||
|
# - "--ping.entrypoint=web"`
|
||||||
|
volumes: []
|
||||||
|
# - name: public-cert
|
||||||
|
# mountPath: "/certs"
|
||||||
|
# type: secret
|
||||||
|
# - name: '{{ printf "%s-configs" .Release.Name }}'
|
||||||
|
# mountPath: "/config"
|
||||||
|
# type: configMap
|
||||||
|
|
||||||
|
# -- Additional volumeMounts to add to the Traefik container
|
||||||
|
additionalVolumeMounts: []
|
||||||
|
# -- For instance when using a logshipper for access logs
|
||||||
|
# - name: traefik-logs
|
||||||
|
# mountPath: /var/log/traefik
|
||||||
|
|
||||||
|
logs:
|
||||||
|
general:
|
||||||
|
# -- By default, the logs use a text format (common), but you can
|
||||||
|
# also ask for the json format in the format option
|
||||||
|
# format: json
|
||||||
|
# By default, the level is set to ERROR.
|
||||||
|
# -- Alternative logging levels are DEBUG, PANIC, FATAL, ERROR, WARN, and INFO.
|
||||||
|
level: ERROR
|
||||||
|
access:
|
||||||
|
# -- To enable access logs
|
||||||
|
enabled: false
|
||||||
|
## By default, logs are written using the Common Log Format (CLF) on stdout.
|
||||||
|
## To write logs in JSON, use json in the format option.
|
||||||
|
## If the given format is unsupported, the default (CLF) is used instead.
|
||||||
|
# format: json
|
||||||
|
# filePath: "/var/log/traefik/access.log
|
||||||
|
## To write the logs in an asynchronous fashion, specify a bufferingSize option.
|
||||||
|
## This option represents the number of log lines Traefik will keep in memory before writing
|
||||||
|
## them to the selected output. In some cases, this option can greatly help performances.
|
||||||
|
# bufferingSize: 100
|
||||||
|
## Filtering
|
||||||
|
# -- https://docs.traefik.io/observability/access-logs/#filtering
|
||||||
|
filters: {}
|
||||||
|
# statuscodes: "200,300-302"
|
||||||
|
# retryattempts: true
|
||||||
|
# minduration: 10ms
|
||||||
|
fields:
|
||||||
|
general:
|
||||||
|
# -- Available modes: keep, drop, redact.
|
||||||
|
defaultmode: keep
|
||||||
|
# -- Names of the fields to limit.
|
||||||
|
names: {}
|
||||||
|
## Examples:
|
||||||
|
# ClientUsername: drop
|
||||||
|
headers:
|
||||||
|
# -- Available modes: keep, drop, redact.
|
||||||
|
defaultmode: drop
|
||||||
|
# -- Names of the headers to limit.
|
||||||
|
names: {}
|
||||||
|
## Examples:
|
||||||
|
# User-Agent: redact
|
||||||
|
# Authorization: drop
|
||||||
|
# Content-Type: keep
|
||||||
|
|
||||||
|
metrics:
|
||||||
|
## -- Prometheus is enabled by default.
|
||||||
|
## -- It can be disabled by setting "prometheus: null"
|
||||||
|
prometheus:
|
||||||
|
# -- Entry point used to expose metrics.
|
||||||
|
entryPoint: metrics
|
||||||
|
## Enable metrics on entry points. Default=true
|
||||||
|
# addEntryPointsLabels: false
|
||||||
|
## Enable metrics on routers. Default=false
|
||||||
|
# addRoutersLabels: true
|
||||||
|
## Enable metrics on services. Default=true
|
||||||
|
# addServicesLabels: false
|
||||||
|
## Buckets for latency metrics. Default="0.1,0.3,1.2,5.0"
|
||||||
|
# buckets: "0.5,1.0,2.5"
|
||||||
|
## When manualRouting is true, it disables the default internal router in
|
||||||
|
## order to allow creating a custom router for prometheus@internal service.
|
||||||
|
# manualRouting: true
|
||||||
|
# datadog:
|
||||||
|
# ## Address instructs exporter to send metrics to datadog-agent at this address.
|
||||||
|
# address: "127.0.0.1:8125"
|
||||||
|
# ## The interval used by the exporter to push metrics to datadog-agent. Default=10s
|
||||||
|
# # pushInterval: 30s
|
||||||
|
# ## The prefix to use for metrics collection. Default="traefik"
|
||||||
|
# # prefix: traefik
|
||||||
|
# ## Enable metrics on entry points. Default=true
|
||||||
|
# # addEntryPointsLabels: false
|
||||||
|
# ## Enable metrics on routers. Default=false
|
||||||
|
# # addRoutersLabels: true
|
||||||
|
# ## Enable metrics on services. Default=true
|
||||||
|
# # addServicesLabels: false
|
||||||
|
# influxdb:
|
||||||
|
# ## Address instructs exporter to send metrics to influxdb at this address.
|
||||||
|
# address: localhost:8089
|
||||||
|
# ## InfluxDB's address protocol (udp or http). Default="udp"
|
||||||
|
# protocol: udp
|
||||||
|
# ## InfluxDB database used when protocol is http. Default=""
|
||||||
|
# # database: ""
|
||||||
|
# ## InfluxDB retention policy used when protocol is http. Default=""
|
||||||
|
# # retentionPolicy: ""
|
||||||
|
# ## InfluxDB username (only with http). Default=""
|
||||||
|
# # username: ""
|
||||||
|
# ## InfluxDB password (only with http). Default=""
|
||||||
|
# # password: ""
|
||||||
|
# ## The interval used by the exporter to push metrics to influxdb. Default=10s
|
||||||
|
# # pushInterval: 30s
|
||||||
|
# ## Additional labels (influxdb tags) on all metrics.
|
||||||
|
# # additionalLabels:
|
||||||
|
# # env: production
|
||||||
|
# # foo: bar
|
||||||
|
# ## Enable metrics on entry points. Default=true
|
||||||
|
# # addEntryPointsLabels: false
|
||||||
|
# ## Enable metrics on routers. Default=false
|
||||||
|
# # addRoutersLabels: true
|
||||||
|
# ## Enable metrics on services. Default=true
|
||||||
|
# # addServicesLabels: false
|
||||||
|
# influxdb2:
|
||||||
|
# ## Address instructs exporter to send metrics to influxdb v2 at this address.
|
||||||
|
# address: localhost:8086
|
||||||
|
# ## Token with which to connect to InfluxDB v2.
|
||||||
|
# token: xxx
|
||||||
|
# ## Organisation where metrics will be stored.
|
||||||
|
# org: ""
|
||||||
|
# ## Bucket where metrics will be stored.
|
||||||
|
# bucket: ""
|
||||||
|
# ## The interval used by the exporter to push metrics to influxdb. Default=10s
|
||||||
|
# # pushInterval: 30s
|
||||||
|
# ## Additional labels (influxdb tags) on all metrics.
|
||||||
|
# # additionalLabels:
|
||||||
|
# # env: production
|
||||||
|
# # foo: bar
|
||||||
|
# ## Enable metrics on entry points. Default=true
|
||||||
|
# # addEntryPointsLabels: false
|
||||||
|
# ## Enable metrics on routers. Default=false
|
||||||
|
# # addRoutersLabels: true
|
||||||
|
# ## Enable metrics on services. Default=true
|
||||||
|
# # addServicesLabels: false
|
||||||
|
# statsd:
|
||||||
|
# ## Address instructs exporter to send metrics to statsd at this address.
|
||||||
|
# address: localhost:8125
|
||||||
|
# ## The interval used by the exporter to push metrics to influxdb. Default=10s
|
||||||
|
# # pushInterval: 30s
|
||||||
|
# ## The prefix to use for metrics collection. Default="traefik"
|
||||||
|
# # prefix: traefik
|
||||||
|
# ## Enable metrics on entry points. Default=true
|
||||||
|
# # addEntryPointsLabels: false
|
||||||
|
# ## Enable metrics on routers. Default=false
|
||||||
|
# # addRoutersLabels: true
|
||||||
|
# ## Enable metrics on services. Default=true
|
||||||
|
# # addServicesLabels: false
|
||||||
|
# openTelemetry:
|
||||||
|
# ## Address of the OpenTelemetry Collector to send metrics to.
|
||||||
|
# address: "localhost:4318"
|
||||||
|
# ## Enable metrics on entry points.
|
||||||
|
# addEntryPointsLabels: true
|
||||||
|
# ## Enable metrics on routers.
|
||||||
|
# addRoutersLabels: true
|
||||||
|
# ## Enable metrics on services.
|
||||||
|
# addServicesLabels: true
|
||||||
|
# ## Explicit boundaries for Histogram data points.
|
||||||
|
# explicitBoundaries:
|
||||||
|
# - "0.1"
|
||||||
|
# - "0.3"
|
||||||
|
# - "1.2"
|
||||||
|
# - "5.0"
|
||||||
|
# ## Additional headers sent with metrics by the reporter to the OpenTelemetry Collector.
|
||||||
|
# headers:
|
||||||
|
# foo: bar
|
||||||
|
# test: test
|
||||||
|
# ## Allows reporter to send metrics to the OpenTelemetry Collector without using a secured protocol.
|
||||||
|
# insecure: true
|
||||||
|
# ## Interval at which metrics are sent to the OpenTelemetry Collector.
|
||||||
|
# pushInterval: 10s
|
||||||
|
# ## Allows to override the default URL path used for sending metrics. This option has no effect when using gRPC transport.
|
||||||
|
# path: /foo/v1/traces
|
||||||
|
# ## Defines the TLS configuration used by the reporter to send metrics to the OpenTelemetry Collector.
|
||||||
|
# tls:
|
||||||
|
# ## The path to the certificate authority, it defaults to the system bundle.
|
||||||
|
# ca: path/to/ca.crt
|
||||||
|
# ## The path to the public certificate. When using this option, setting the key option is required.
|
||||||
|
# cert: path/to/foo.cert
|
||||||
|
# ## The path to the private key. When using this option, setting the cert option is required.
|
||||||
|
# key: path/to/key.key
|
||||||
|
# ## If set to true, the TLS connection accepts any certificate presented by the server regardless of the hostnames it covers.
|
||||||
|
# insecureSkipVerify: true
|
||||||
|
# ## This instructs the reporter to send metrics to the OpenTelemetry Collector using gRPC.
|
||||||
|
# grpc: true
|
||||||
|
|
||||||
|
## -- enable optional CRDs for Prometheus Operator
|
||||||
|
##
|
||||||
|
## Create a dedicated metrics service for use with ServiceMonitor
|
||||||
|
# service:
|
||||||
|
# enabled: false
|
||||||
|
# labels: {}
|
||||||
|
# annotations: {}
|
||||||
|
## When set to true, it won't check if Prometheus Operator CRDs are deployed
|
||||||
|
# disableAPICheck: false
|
||||||
|
# serviceMonitor:
|
||||||
|
# metricRelabelings: []
|
||||||
|
# - sourceLabels: [__name__]
|
||||||
|
# separator: ;
|
||||||
|
# regex: ^fluentd_output_status_buffer_(oldest|newest)_.+
|
||||||
|
# replacement: $1
|
||||||
|
# action: drop
|
||||||
|
# relabelings: []
|
||||||
|
# - sourceLabels: [__meta_kubernetes_pod_node_name]
|
||||||
|
# separator: ;
|
||||||
|
# regex: ^(.*)$
|
||||||
|
# targetLabel: nodename
|
||||||
|
# replacement: $1
|
||||||
|
# action: replace
|
||||||
|
# jobLabel: traefik
|
||||||
|
# interval: 30s
|
||||||
|
# honorLabels: true
|
||||||
|
# # (Optional)
|
||||||
|
# # scrapeTimeout: 5s
|
||||||
|
# # honorTimestamps: true
|
||||||
|
# # enableHttp2: true
|
||||||
|
# # followRedirects: true
|
||||||
|
# # additionalLabels:
|
||||||
|
# # foo: bar
|
||||||
|
# # namespace: "another-namespace"
|
||||||
|
# # namespaceSelector: {}
|
||||||
|
# prometheusRule:
|
||||||
|
# additionalLabels: {}
|
||||||
|
# namespace: "another-namespace"
|
||||||
|
# rules:
|
||||||
|
# - alert: TraefikDown
|
||||||
|
# expr: up{job="traefik"} == 0
|
||||||
|
# for: 5m
|
||||||
|
# labels:
|
||||||
|
# context: traefik
|
||||||
|
# severity: warning
|
||||||
|
# annotations:
|
||||||
|
# summary: "Traefik Down"
|
||||||
|
# description: "{{ $labels.pod }} on {{ $labels.nodename }} is down"
|
||||||
|
|
||||||
|
## Tracing
|
||||||
|
# -- https://doc.traefik.io/traefik/observability/tracing/overview/
|
||||||
|
tracing: {}
|
||||||
|
# openTelemetry: # traefik v3+ only
|
||||||
|
# grpc: true
|
||||||
|
# insecure: true
|
||||||
|
# address: localhost:4317
|
||||||
|
# instana:
|
||||||
|
# localAgentHost: 127.0.0.1
|
||||||
|
# localAgentPort: 42699
|
||||||
|
# logLevel: info
|
||||||
|
# enableAutoProfile: true
|
||||||
|
# datadog:
|
||||||
|
# localAgentHostPort: 127.0.0.1:8126
|
||||||
|
# debug: false
|
||||||
|
# globalTag: ""
|
||||||
|
# prioritySampling: false
|
||||||
|
# jaeger:
|
||||||
|
# samplingServerURL: http://localhost:5778/sampling
|
||||||
|
# samplingType: const
|
||||||
|
# samplingParam: 1.0
|
||||||
|
# localAgentHostPort: 127.0.0.1:6831
|
||||||
|
# gen128Bit: false
|
||||||
|
# propagation: jaeger
|
||||||
|
# traceContextHeaderName: uber-trace-id
|
||||||
|
# disableAttemptReconnecting: true
|
||||||
|
# collector:
|
||||||
|
# endpoint: ""
|
||||||
|
# user: ""
|
||||||
|
# password: ""
|
||||||
|
# zipkin:
|
||||||
|
# httpEndpoint: http://localhost:9411/api/v2/spans
|
||||||
|
# sameSpan: false
|
||||||
|
# id128Bit: true
|
||||||
|
# sampleRate: 1.0
|
||||||
|
# haystack:
|
||||||
|
# localAgentHost: 127.0.0.1
|
||||||
|
# localAgentPort: 35000
|
||||||
|
# globalTag: ""
|
||||||
|
# traceIDHeaderName: ""
|
||||||
|
# parentIDHeaderName: ""
|
||||||
|
# spanIDHeaderName: ""
|
||||||
|
# baggagePrefixHeaderName: ""
|
||||||
|
# elastic:
|
||||||
|
# serverURL: http://localhost:8200
|
||||||
|
# secretToken: ""
|
||||||
|
# serviceEnvironment: ""
|
||||||
|
|
||||||
|
# -- Global command arguments to be passed to all traefik's pods
|
||||||
|
globalArguments:
|
||||||
|
- "--global.checknewversion"
|
||||||
|
- "--global.sendanonymoususage"
|
||||||
|
|
||||||
|
#
|
||||||
|
# Configure Traefik static configuration
|
||||||
|
# -- Additional arguments to be passed at Traefik's binary
|
||||||
|
# All available options available on https://docs.traefik.io/reference/static-configuration/cli/
|
||||||
|
## Use curly braces to pass values: `helm install --set="additionalArguments={--providers.kubernetesingress.ingressclass=traefik-internal,--log.level=DEBUG}"`
|
||||||
|
additionalArguments: []
|
||||||
|
# - "--providers.kubernetesingress.ingressclass=traefik-internal"
|
||||||
|
# - "--log.level=DEBUG"
|
||||||
|
|
||||||
|
# -- Environment variables to be passed to Traefik's binary
|
||||||
|
env:
|
||||||
|
- name: POD_NAME
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: metadata.name
|
||||||
|
- name: POD_NAMESPACE
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: metadata.namespace
|
||||||
|
# - name: SOME_VAR
|
||||||
|
# value: some-var-value
|
||||||
|
# - name: SOME_VAR_FROM_CONFIG_MAP
|
||||||
|
# valueFrom:
|
||||||
|
# configMapRef:
|
||||||
|
# name: configmap-name
|
||||||
|
# key: config-key
|
||||||
|
# - name: SOME_SECRET
|
||||||
|
# valueFrom:
|
||||||
|
# secretKeyRef:
|
||||||
|
# name: secret-name
|
||||||
|
# key: secret-key
|
||||||
|
|
||||||
|
# -- Environment variables to be passed to Traefik's binary from configMaps or secrets
|
||||||
|
envFrom: []
|
||||||
|
# - configMapRef:
|
||||||
|
# name: config-map-name
|
||||||
|
# - secretRef:
|
||||||
|
# name: secret-name
|
||||||
|
|
||||||
|
ports:
|
||||||
|
traefik:
|
||||||
|
port: 9000
|
||||||
|
# -- Use hostPort if set.
|
||||||
|
# hostPort: 9000
|
||||||
|
#
|
||||||
|
# -- Use hostIP if set. If not set, Kubernetes will default to 0.0.0.0, which
|
||||||
|
# means it's listening on all your interfaces and all your IPs. You may want
|
||||||
|
# to set this value if you need traefik to listen on specific interface
|
||||||
|
# only.
|
||||||
|
# hostIP: 192.168.100.10
|
||||||
|
|
||||||
|
# Defines whether the port is exposed if service.type is LoadBalancer or
|
||||||
|
# NodePort.
|
||||||
|
#
|
||||||
|
# -- You SHOULD NOT expose the traefik port on production deployments.
|
||||||
|
# If you want to access it from outside your cluster,
|
||||||
|
# use `kubectl port-forward` or create a secure ingress
|
||||||
|
expose: false
|
||||||
|
# -- The exposed port for this service
|
||||||
|
exposedPort: 9000
|
||||||
|
# -- The port protocol (TCP/UDP)
|
||||||
|
protocol: TCP
|
||||||
|
# -- Defines whether the port is exposed on the internal service;
|
||||||
|
# note that ports exposed on the default service are exposed on the internal
|
||||||
|
# service by default as well.
|
||||||
|
exposeInternal: false
|
||||||
|
web:
|
||||||
|
## -- Enable this entrypoint as a default entrypoint. When a service doesn't explicitly set an entrypoint it will only use this entrypoint.
|
||||||
|
# asDefault: true
|
||||||
|
port: 8000
|
||||||
|
# hostPort: 8000
|
||||||
|
# containerPort: 8000
|
||||||
|
expose: true
|
||||||
|
exposedPort: 80
|
||||||
|
## -- Different target traefik port on the cluster, useful for IP type LB
|
||||||
|
# targetPort: 80
|
||||||
|
# The port protocol (TCP/UDP)
|
||||||
|
protocol: TCP
|
||||||
|
# -- Use nodeport if set. This is useful if you have configured Traefik in a
|
||||||
|
# LoadBalancer.
|
||||||
|
# nodePort: 32080
|
||||||
|
# -- Defines whether the port is exposed on the internal service;
|
||||||
|
# note that ports exposed on the default service are exposed on the internal
|
||||||
|
# service by default as well.
|
||||||
|
exposeInternal: false
|
||||||
|
# Port Redirections
|
||||||
|
# Added in 2.2, you can make permanent redirects via entrypoints.
|
||||||
|
# https://docs.traefik.io/routing/entrypoints/#redirection
|
||||||
|
# redirectTo:
|
||||||
|
# port: websecure
|
||||||
|
# (Optional)
|
||||||
|
# priority: 10
|
||||||
|
#
|
||||||
|
# Trust forwarded headers information (X-Forwarded-*).
|
||||||
|
# forwardedHeaders:
|
||||||
|
# trustedIPs: []
|
||||||
|
# insecure: false
|
||||||
|
#
|
||||||
|
# Enable the Proxy Protocol header parsing for the entry point
|
||||||
|
# proxyProtocol:
|
||||||
|
# trustedIPs: []
|
||||||
|
# insecure: false
|
||||||
|
websecure:
|
||||||
|
## -- Enable this entrypoint as a default entrypoint. When a service doesn't explicitly set an entrypoint it will only use this entrypoint.
|
||||||
|
# asDefault: true
|
||||||
|
port: 8443
|
||||||
|
# hostPort: 8443
|
||||||
|
# containerPort: 8443
|
||||||
|
expose: true
|
||||||
|
exposedPort: 443
|
||||||
|
## -- Different target traefik port on the cluster, useful for IP type LB
|
||||||
|
# targetPort: 80
|
||||||
|
## -- The port protocol (TCP/UDP)
|
||||||
|
protocol: TCP
|
||||||
|
# nodePort: 32443
|
||||||
|
# -- Defines whether the port is exposed on the internal service;
|
||||||
|
# note that ports exposed on the default service are exposed on the internal
|
||||||
|
# service by default as well.
|
||||||
|
exposeInternal: false
|
||||||
|
## -- Specify an application protocol. This may be used as a hint for a Layer 7 load balancer.
|
||||||
|
# appProtocol: https
|
||||||
|
#
|
||||||
|
## -- Enable HTTP/3 on the entrypoint
|
||||||
|
## Enabling it will also enable http3 experimental feature
|
||||||
|
## https://doc.traefik.io/traefik/routing/entrypoints/#http3
|
||||||
|
## There are known limitations when trying to listen on same ports for
|
||||||
|
## TCP & UDP (Http3). There is a workaround in this chart using dual Service.
|
||||||
|
## https://github.com/kubernetes/kubernetes/issues/47249#issuecomment-587960741
|
||||||
|
http3:
|
||||||
|
enabled: false
|
||||||
|
# advertisedPort: 4443
|
||||||
|
#
|
||||||
|
## -- Trust forwarded headers information (X-Forwarded-*).
|
||||||
|
# forwardedHeaders:
|
||||||
|
# trustedIPs: []
|
||||||
|
# insecure: false
|
||||||
|
#
|
||||||
|
## -- Enable the Proxy Protocol header parsing for the entry point
|
||||||
|
# proxyProtocol:
|
||||||
|
# trustedIPs: []
|
||||||
|
# insecure: false
|
||||||
|
#
|
||||||
|
## Set TLS at the entrypoint
|
||||||
|
## https://doc.traefik.io/traefik/routing/entrypoints/#tls
|
||||||
|
tls:
|
||||||
|
enabled: true
|
||||||
|
# this is the name of a TLSOption definition
|
||||||
|
options: ""
|
||||||
|
certResolver: ""
|
||||||
|
domains: []
|
||||||
|
# - main: example.com
|
||||||
|
# sans:
|
||||||
|
# - foo.example.com
|
||||||
|
# - bar.example.com
|
||||||
|
#
|
||||||
|
# -- One can apply Middlewares on an entrypoint
|
||||||
|
# https://doc.traefik.io/traefik/middlewares/overview/
|
||||||
|
# https://doc.traefik.io/traefik/routing/entrypoints/#middlewares
|
||||||
|
# -- /!\ It introduces here a link between your static configuration and your dynamic configuration /!\
|
||||||
|
# It follows the provider naming convention: https://doc.traefik.io/traefik/providers/overview/#provider-namespace
|
||||||
|
# middlewares:
|
||||||
|
# - namespace-name1@kubernetescrd
|
||||||
|
# - namespace-name2@kubernetescrd
|
||||||
|
middlewares: []
|
||||||
|
metrics:
|
||||||
|
# -- When using hostNetwork, use another port to avoid conflict with node exporter:
|
||||||
|
# https://github.com/prometheus/prometheus/wiki/Default-port-allocations
|
||||||
|
port: 9100
|
||||||
|
# hostPort: 9100
|
||||||
|
# Defines whether the port is exposed if service.type is LoadBalancer or
|
||||||
|
# NodePort.
|
||||||
|
#
|
||||||
|
# -- You may not want to expose the metrics port on production deployments.
|
||||||
|
# If you want to access it from outside your cluster,
|
||||||
|
# use `kubectl port-forward` or create a secure ingress
|
||||||
|
expose: false
|
||||||
|
# -- The exposed port for this service
|
||||||
|
exposedPort: 9100
|
||||||
|
# -- The port protocol (TCP/UDP)
|
||||||
|
protocol: TCP
|
||||||
|
# -- Defines whether the port is exposed on the internal service;
|
||||||
|
# note that ports exposed on the default service are exposed on the internal
|
||||||
|
# service by default as well.
|
||||||
|
exposeInternal: false
|
||||||
|
|
||||||
|
# -- TLS Options are created as TLSOption CRDs
|
||||||
|
# https://doc.traefik.io/traefik/https/tls/#tls-options
|
||||||
|
# When using `labelSelector`, you'll need to set labels on tlsOption accordingly.
|
||||||
|
# Example:
|
||||||
|
# tlsOptions:
|
||||||
|
# default:
|
||||||
|
# labels: {}
|
||||||
|
# sniStrict: true
|
||||||
|
# preferServerCipherSuites: true
|
||||||
|
# custom-options:
|
||||||
|
# labels: {}
|
||||||
|
# curvePreferences:
|
||||||
|
# - CurveP521
|
||||||
|
# - CurveP384
|
||||||
|
tlsOptions: {}
|
||||||
|
|
||||||
|
# -- TLS Store are created as TLSStore CRDs. This is useful if you want to set a default certificate
|
||||||
|
# https://doc.traefik.io/traefik/https/tls/#default-certificate
|
||||||
|
# Example:
|
||||||
|
# tlsStore:
|
||||||
|
# default:
|
||||||
|
# defaultCertificate:
|
||||||
|
# secretName: tls-cert
|
||||||
|
tlsStore: {}
|
||||||
|
|
||||||
|
service:
|
||||||
|
enabled: true
|
||||||
|
## -- Single service is using `MixedProtocolLBService` feature gate.
|
||||||
|
## -- When set to false, it will create two Service, one for TCP and one for UDP.
|
||||||
|
single: true
|
||||||
|
type: LoadBalancer
|
||||||
|
# -- Additional annotations applied to both TCP and UDP services (e.g. for cloud provider specific config)
|
||||||
|
annotations: {}
|
||||||
|
# -- Additional annotations for TCP service only
|
||||||
|
annotationsTCP: {}
|
||||||
|
# -- Additional annotations for UDP service only
|
||||||
|
annotationsUDP: {}
|
||||||
|
# -- Additional service labels (e.g. for filtering Service by custom labels)
|
||||||
|
labels: {}
|
||||||
|
# -- Additional entries here will be added to the service spec.
|
||||||
|
# -- Cannot contain type, selector or ports entries.
|
||||||
|
spec: {}
|
||||||
|
# externalTrafficPolicy: Cluster
|
||||||
|
# loadBalancerIP: "1.2.3.4"
|
||||||
|
# clusterIP: "2.3.4.5"
|
||||||
|
loadBalancerSourceRanges: []
|
||||||
|
# - 192.168.0.1/32
|
||||||
|
# - 172.16.0.0/16
|
||||||
|
## -- Class of the load balancer implementation
|
||||||
|
# loadBalancerClass: service.k8s.aws/nlb
|
||||||
|
externalIPs: []
|
||||||
|
# - 1.2.3.4
|
||||||
|
## One of SingleStack, PreferDualStack, or RequireDualStack.
|
||||||
|
# ipFamilyPolicy: SingleStack
|
||||||
|
## List of IP families (e.g. IPv4 and/or IPv6).
|
||||||
|
## ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/#services
|
||||||
|
# ipFamilies:
|
||||||
|
# - IPv4
|
||||||
|
# - IPv6
|
||||||
|
##
|
||||||
|
## -- An additional and optional internal Service.
|
||||||
|
## Same parameters as external Service
|
||||||
|
# internal:
|
||||||
|
# type: ClusterIP
|
||||||
|
# # labels: {}
|
||||||
|
# # annotations: {}
|
||||||
|
# # spec: {}
|
||||||
|
# # loadBalancerSourceRanges: []
|
||||||
|
# # externalIPs: []
|
||||||
|
# # ipFamilies: [ "IPv4","IPv6" ]
|
||||||
|
|
||||||
|
autoscaling:
|
||||||
|
# -- Create HorizontalPodAutoscaler object.
|
||||||
|
enabled: false
|
||||||
|
# minReplicas: 1
|
||||||
|
# maxReplicas: 10
|
||||||
|
# metrics:
|
||||||
|
# - type: Resource
|
||||||
|
# resource:
|
||||||
|
# name: cpu
|
||||||
|
# target:
|
||||||
|
# type: Utilization
|
||||||
|
# averageUtilization: 60
|
||||||
|
# - type: Resource
|
||||||
|
# resource:
|
||||||
|
# name: memory
|
||||||
|
# target:
|
||||||
|
# type: Utilization
|
||||||
|
# averageUtilization: 60
|
||||||
|
# behavior:
|
||||||
|
# scaleDown:
|
||||||
|
# stabilizationWindowSeconds: 300
|
||||||
|
# policies:
|
||||||
|
# - type: Pods
|
||||||
|
# value: 1
|
||||||
|
# periodSeconds: 60
|
||||||
|
|
||||||
|
persistence:
|
||||||
|
# -- Enable persistence using Persistent Volume Claims
|
||||||
|
# ref: http://kubernetes.io/docs/user-guide/persistent-volumes/
|
||||||
|
# It can be used to store TLS certificates, see `storage` in certResolvers
|
||||||
|
enabled: false
|
||||||
|
name: data
|
||||||
|
# existingClaim: ""
|
||||||
|
accessMode: ReadWriteOnce
|
||||||
|
size: 128Mi
|
||||||
|
# storageClass: ""
|
||||||
|
# volumeName: ""
|
||||||
|
path: /data
|
||||||
|
annotations: {}
|
||||||
|
# -- Only mount a subpath of the Volume into the pod
|
||||||
|
# subPath: ""
|
||||||
|
|
||||||
|
# -- Certificates resolvers configuration
|
||||||
|
certResolvers: {}
|
||||||
|
# letsencrypt:
|
||||||
|
# # for challenge options cf. https://doc.traefik.io/traefik/https/acme/
|
||||||
|
# email: email@example.com
|
||||||
|
# dnsChallenge:
|
||||||
|
# # also add the provider's required configuration under env
|
||||||
|
# # or expand then from secrets/configmaps with envfrom
|
||||||
|
# # cf. https://doc.traefik.io/traefik/https/acme/#providers
|
||||||
|
# provider: digitalocean
|
||||||
|
# # add futher options for the dns challenge as needed
|
||||||
|
# # cf. https://doc.traefik.io/traefik/https/acme/#dnschallenge
|
||||||
|
# delayBeforeCheck: 30
|
||||||
|
# resolvers:
|
||||||
|
# - 1.1.1.1
|
||||||
|
# - 8.8.8.8
|
||||||
|
# tlsChallenge: true
|
||||||
|
# httpChallenge:
|
||||||
|
# entryPoint: "web"
|
||||||
|
# # It has to match the path with a persistent volume
|
||||||
|
# storage: /data/acme.json
|
||||||
|
|
||||||
|
# -- If hostNetwork is true, runs traefik in the host network namespace
|
||||||
|
# To prevent unschedulabel pods due to port collisions, if hostNetwork=true
|
||||||
|
# and replicas>1, a pod anti-affinity is recommended and will be set if the
|
||||||
|
# affinity is left as default.
|
||||||
|
hostNetwork: false
|
||||||
|
|
||||||
|
# -- Whether Role Based Access Control objects like roles and rolebindings should be created
|
||||||
|
rbac:
|
||||||
|
enabled: true
|
||||||
|
# If set to false, installs ClusterRole and ClusterRoleBinding so Traefik can be used across namespaces.
|
||||||
|
# If set to true, installs Role and RoleBinding. Providers will only watch target namespace.
|
||||||
|
namespaced: false
|
||||||
|
# Enable user-facing roles
|
||||||
|
# https://kubernetes.io/docs/reference/access-authn-authz/rbac/#user-facing-roles
|
||||||
|
# aggregateTo: [ "admin" ]
|
||||||
|
|
||||||
|
# -- Enable to create a PodSecurityPolicy and assign it to the Service Account via RoleBinding or ClusterRoleBinding
|
||||||
|
podSecurityPolicy:
|
||||||
|
enabled: false
|
||||||
|
|
||||||
|
# -- The service account the pods will use to interact with the Kubernetes API
|
||||||
|
serviceAccount:
|
||||||
|
# If set, an existing service account is used
|
||||||
|
# If not set, a service account is created automatically using the fullname template
|
||||||
|
name: ""
|
||||||
|
|
||||||
|
# -- Additional serviceAccount annotations (e.g. for oidc authentication)
|
||||||
|
serviceAccountAnnotations: {}
|
||||||
|
|
||||||
|
# -- The resources parameter defines CPU and memory requirements and limits for Traefik's containers.
|
||||||
|
resources: {}
|
||||||
|
# requests:
|
||||||
|
# cpu: "100m"
|
||||||
|
# memory: "50Mi"
|
||||||
|
# limits:
|
||||||
|
# cpu: "300m"
|
||||||
|
# memory: "150Mi"
|
||||||
|
|
||||||
|
# -- This example pod anti-affinity forces the scheduler to put traefik pods
|
||||||
|
# -- on nodes where no other traefik pods are scheduled.
|
||||||
|
# It should be used when hostNetwork: true to prevent port conflicts
|
||||||
|
affinity: {}
|
||||||
|
# podAntiAffinity:
|
||||||
|
# requiredDuringSchedulingIgnoredDuringExecution:
|
||||||
|
# - labelSelector:
|
||||||
|
# matchLabels:
|
||||||
|
# app.kubernetes.io/name: '{{ template "traefik.name" . }}'
|
||||||
|
# app.kubernetes.io/instance: '{{ .Release.Name }}-{{ .Release.Namespace }}'
|
||||||
|
# topologyKey: kubernetes.io/hostname
|
||||||
|
|
||||||
|
# -- nodeSelector is the simplest recommended form of node selection constraint.
|
||||||
|
nodeSelector: {}
|
||||||
|
# -- Tolerations allow the scheduler to schedule pods with matching taints.
|
||||||
|
tolerations: []
|
||||||
|
# -- You can use topology spread constraints to control
|
||||||
|
# how Pods are spread across your cluster among failure-domains.
|
||||||
|
topologySpreadConstraints: []
|
||||||
|
# This example topologySpreadConstraints forces the scheduler to put traefik pods
|
||||||
|
# on nodes where no other traefik pods are scheduled.
|
||||||
|
# - labelSelector:
|
||||||
|
# matchLabels:
|
||||||
|
# app: '{{ template "traefik.name" . }}'
|
||||||
|
# maxSkew: 1
|
||||||
|
# topologyKey: kubernetes.io/hostname
|
||||||
|
# whenUnsatisfiable: DoNotSchedule
|
||||||
|
|
||||||
|
# -- Pods can have priority.
|
||||||
|
# -- Priority indicates the importance of a Pod relative to other Pods.
|
||||||
|
priorityClassName: ""
|
||||||
|
|
||||||
|
# -- Set the container security context
|
||||||
|
# -- To run the container with ports below 1024 this will need to be adjusted to run as root
|
||||||
|
securityContext:
|
||||||
|
capabilities:
|
||||||
|
drop: [ALL]
|
||||||
|
readOnlyRootFilesystem: true
|
||||||
|
allowPrivilegeEscalation: false
|
||||||
|
|
||||||
|
podSecurityContext:
|
||||||
|
# /!\ When setting fsGroup, Kubernetes will recursively change ownership and
|
||||||
|
# permissions for the contents of each volume to match the fsGroup. This can
|
||||||
|
# be an issue when storing sensitive content like TLS Certificates /!\
|
||||||
|
# fsGroup: 65532
|
||||||
|
# -- Specifies the policy for changing ownership and permissions of volume contents to match the fsGroup.
|
||||||
|
fsGroupChangePolicy: "OnRootMismatch"
|
||||||
|
# -- The ID of the group for all containers in the pod to run as.
|
||||||
|
runAsGroup: 65532
|
||||||
|
# -- Specifies whether the containers should run as a non-root user.
|
||||||
|
runAsNonRoot: true
|
||||||
|
# -- The ID of the user for all containers in the pod to run as.
|
||||||
|
runAsUser: 65532
|
||||||
|
|
||||||
|
#
|
||||||
|
# -- Extra objects to deploy (value evaluated as a template)
|
||||||
|
#
|
||||||
|
# In some cases, it can avoid the need for additional, extended or adhoc deployments.
|
||||||
|
# See #595 for more details and traefik/tests/values/extra.yaml for example.
|
||||||
|
extraObjects: []
|
||||||
|
|
||||||
|
# This will override the default Release Namespace for Helm.
|
||||||
|
# It will not affect optional CRDs such as `ServiceMonitor` and `PrometheusRules`
|
||||||
|
# namespaceOverride: traefik
|
||||||
|
#
|
||||||
|
## -- This will override the default app.kubernetes.io/instance label for all Objects.
|
||||||
|
# instanceLabelOverride: traefik
|
4
traefik/base/kustomization.yaml
Normal file
4
traefik/base/kustomization.yaml
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
---
|
||||||
|
resources: [namespace.yaml]
|
||||||
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||||
|
kind: Kustomization
|
8
traefik/base/namespace.yaml
Normal file
8
traefik/base/namespace.yaml
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: traefik
|
||||||
|
spec:
|
||||||
|
finalizers:
|
||||||
|
- kubernetes
|
13
traefik/overlays/dev/kustomization.yaml
Normal file
13
traefik/overlays/dev/kustomization.yaml
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
---
|
||||||
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||||
|
kind: Kustomization
|
||||||
|
resources: [../../base/]
|
||||||
|
helmCharts:
|
||||||
|
- includeCRDs: true
|
||||||
|
name: jupyterhub
|
||||||
|
releaseName: traefik
|
||||||
|
valuesFile: ./values/values.yaml
|
||||||
|
version: 26.1.0
|
||||||
|
namespace: traefik
|
||||||
|
helmGlobals:
|
||||||
|
chartHome: ../../base/charts/
|
11
traefik/overlays/dev/values/values.yaml
Normal file
11
traefik/overlays/dev/values/values.yaml
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
deployment:
|
||||||
|
kind: DaemonSet
|
||||||
|
providers:
|
||||||
|
kubernetesIngress:
|
||||||
|
publishedService:
|
||||||
|
enabled: true
|
||||||
|
ports:
|
||||||
|
web:
|
||||||
|
nodePort: 30080
|
||||||
|
websecure:
|
||||||
|
nodePort: 30443
|
Loading…
Reference in a new issue