Skip to main content

teleport-relay Chart Reference

The teleport-relay Helm chart is used to deploy a Teleport Relay Service group in a Kubernetes cluster, to provide connectivity between clients and resources without involving the Teleport control plane in the network path.

The teleport-relay chart is available for Teleport v18.3.0 and later.

You can browse the source on GitHub.

This reference details available values for the teleport-relay chart.

warning

The Teleport Relay service provides alternate network paths for accessing resources through Teleport in specific scenarios where clients and agents are in the same network segment and there is a need for connectivity that does not go through the Teleport control plane. It is not a required or recommended cluster component in most Teleport deployments.

If you want to provide access to resources like Databases, Applications or Kubernetes clusters, you should use the teleport-kube-agent Helm chart instead.

Warning

Backing up production instances, environments, and/or settings before making permanent modifications is encouraged as a best practice. Doing so allows you to roll back to an existing state if needed.

What the chart deploys

The teleport-relay chart deploys the following Kubernetes resources:

KindDefault nameDescription
DeploymentThe release nameOne or more replicas of the Teleport instance running the Relay Service
ServiceThe release nameThe transport and tunnel servers, pointed at the respective listeners of the Relay Service replicas.
ConfigMapThe release nameThe Teleport configuration.
SecretjoinTokenSecret.name, if given, or the release nameThe join token name, used to join the cluster. It's possible to use an existing Secret that's managed outside of the chart.
ServiceAccountserviceAccount.name, if given, or the release nameUsed for the kubernetes join method. It's possible to use an existing ServiceAccount that's managed outside of the chart.
PodDisruptionBudgetThe release nameEnsures high availability for the Teleport pods.

Reference

relayGroup

TypeDefault
string""

relayGroup sets the internal identifier for the group of Relay instances reachable through the same load balancer. Should be unique in the whole Teleport cluster.

publicHostnames

TypeDefault
list[]

publicHostnames a list of hostnames that this Relay group is publicly reachable at by clients.

publicHostnames:
  - relay.example.com

targetConnectionCount

TypeDefault
int2

targetConnectionCount the amount of tunnel connections that agents will open to distinct Relay instances. It should not be bigger than the replica count.

proxyAddr

TypeDefault
string""

proxyAddr provides the public-facing Teleport Proxy Service endpoint which should be used to join the cluster. This is the same URL used to access the web UI of your Teleport cluster. The port used is usually either 3080 or 443.

Here are a few examples:

Deployment methodExample proxy_service.public_addr
On-prem Teleport clusterteleport.example.com:3080
Teleport Cloud clusterexample.teleport.sh:443
teleport-cluster Helm chartteleport.example.com:443

enterprise

TypeDefault
boolfalse

enterprise controls if the teleport-relay chart should deploy the OSS version or the enterprise version of the container image. This must be set to true when connecting to Teleport Cloud or self-hosted Teleport Enterprise clusters to allow the agent to leverage enterprise features.

joinParams

joinParams controls how the Teleport Agent joins the Teleport cluster. These sub-values must be configured for the agent to connect to a cluster.

The token used must grant the Relay role, and should be valid for the lifetime of the Helm release.

joinParams.method

TypeDefault
string""

joinParams.method controls which join method will be used by the instance to join the Teleport cluster.

See the join method reference for the list of possible values, the implications of each join method, and guides to set up each method.

Common join-methods for the teleport-relay are:

  • token: the most basic one, with regular ephemeral secret tokens
  • kubernetes: either the in-cluster variant (if the agent runs in the same Kubernetes cluster as the teleport-cluster chart) or the JWKS/OIDC variants (work in every Kubernetes cluster, regardless of the Teleport Auth Service location).

joinParams.tokenName

TypeDefault
string""

joinParams.tokenName controls which token is used by the agent to join the Teleport cluster.

When joinParams.method is a delegated join method, the value is not sensitive.

When joinParams.method is token (by default), joinParams.tokenName contains the secret token itself. In this case, the value is sensitive and is automatically stored in a Kubernetes Secret instead of being directly included in the agent's configuration.

If method is token, joinParams.tokenName can be empty if the token is provided through an existing Kubernetes Secret, see joinTokenSecret for more details and instructions.

If method is kubernetes, you must set teleportClusterName.

teleportClusterName

TypeDefault
string""

teleportClusterName is the name of the joined Teleport cluster. Setting this value is required when joining via the Kubernetes JWKS or OIDC join method.

When this value is set, the chart mounts a kubernetes service account token via a projected volume and configures Teleport to use it for joining.

joinTokenSecret

joinTokenSecret manages the join token secret creation and its name. See the joinParams section for more details.

joinTokenSecret.create

TypeDefault
booltrue

joinTokenSecret.create controls whether the chart creates the Kubernetes Secret containing the Teleport join token. If false, you must create a Kubernetes Secret with the configured name in the Helm release namespace.

joinTokenSecret.name

TypeDefault
string""

joinTokenSecret.name is the name of the Kubernetes Secret containing the Teleport join token used by the chart.

If joinTokenSecret.create is false, the chart will not attempt to create the secret itself. Instead, it will read the value from an existing secret. joinTokenSecret.name configures the name of this secret. This allows you to configure this secret externally and avoid having a plaintext join token stored in your Teleport chart values.

To create your own join token secret, you can use a command like this:

kubectl --namespace teleport create secret generic my-token-secret --from-literal=auth-token=<replace-with-actual-token>
note

The key used for the auth token inside the secret must be auth-token, as in the command above.

joinTokenSecret:
  create: false
  name: my-token-secret

joinParams:
  method: "token"
  tokenName: ""

proxyProtocol

TypeDefault
boolfalse

proxyProtocol controls whether or not the connections coming from the load balancer will include a PROXY protocol v2 header.

log

log controls the agent logging.

log.level

TypeDefault
string"INFO"

log.level is the log level for the Teleport process. Available log levels are: DEBUG, INFO, WARNING, ERROR.

The default is INFO, which is recommended in production. DEBUG is useful during first-time setup or to see more detailed logs for debugging.

log.format

TypeDefault
string"json"

log.format sets the log output format for the Teleport process. Possible values are text or json.

preStopDelay

TypeDefault
string"30s"

preStopDelay the optional time that will pass between the pod entering the Terminating state and the Teleport instance getting signaled to begin its shutdown advertisement. Useful to allow load balancers to stop routing connections to the terminating pod.

shutdownDelay

TypeDefault
string"30s"

shutdownDelay the optional time that the Teleport instance will wait after advertising its shutdown and before it will stop serving new inbound connections.

terminationGracePeriodSeconds

TypeDefault
int90

terminationGracePeriodSeconds the time allotted to a Teleport instance pod for termination. It should be longer than the sum of preStopDelay and shutdownDelay.

highAvailability

highAvailability contains settings controlling the availability of the Teleport Agent deployed by the chart.

The availability can be increased by:

  • running more replicas with replicaCount
  • requiring that the Pods are not scheduled on the same Kubernetes Node with requireAntiAffinity
  • by asking Kubernetes not to delete all pods at the same time with podDisruptionBudget.

Even with highAvailability settings Restarting/rolling-out pods can still cause disruption for established long-lived sessions.

highAvailability.replicaCount

TypeDefault
int2

highAvailability.replicaCount is the number of agent replicas deployed by the Chart.

Set to a number higher than 1 for a high availability mode where multiple Teleport pods will be deployed.

Sizing guidelines

As a rough guide, we recommend configuring one replica per distinct availability zone where your cluster has worker nodes.

2 replicas/availability zones will be fine for smaller workloads. 3-5 replicas/availability zones will be more appropriate for bigger clusters with more traffic.

highAvailability.podDisruptionBudget

highAvailability.podDisruptionBudget controls how the chart creates and configures a Kubernetes PodDisruptionBudget to ensure Kubernetes does not delete all agent replicas at the same time.

highAvailability.podDisruptionBudget.enabled

TypeDefault
boolfalse

highAvailability.podDisruptionBudget.enabled makes the chart create a Kubernetes PodDisruptionBudget for the agent pods.

highAvailability.podDisruptionBudget.minAvailable

TypeDefault
intOrString1

highAvailability.podDisruptionBudget.minAvailable is the minimum available pod count specified on the PodDisruptionBudget.

resources

TypeDefault
object{}

resources sets the resource requests/limits for any pods created by the chart. See the Kubernetes documentation for more details.

service

service options for the Service that points to the Teleport Relay instances.

service.type

TypeDefault
string"LoadBalancer"

service.type the type of the Service. Unless you have specific needs, it should probably be set to LoadBalancer.

service.spec

TypeDefault
object{}

service.spec any additional entries here will be added to the Service spec.

spec:
  loadBalancerIP: "1.2.3.4"
  loadBalancerClass: service.k8s.aws/nlb

serviceAccount

serviceAccount contains settings related to the Kubernetes service account used by pods.

serviceAccount.create

TypeDefault
booltrue

serviceAccount.create specifies whether a ServiceAccount should be created or if an existing one should be used.

serviceAccount.name

TypeDefault
string""

serviceAccount.name the name of the ServiceAccount to use. If not set and serviceAccount.create is true, the name is generated using the release name. If create is false, the name will be used to reference an existing service account.

extraLabels

extraLabels contains additional Kubernetes labels to apply on the resources created by the chart. See the Kubernetes label documentation for more information.

extraLabels.config

TypeDefault
object{}

extraLabels.config are labels to set on the ConfigMap.

extraLabels.deployment

TypeDefault
object{}

extraLabels.deployment are labels to set on the Deployment.

extraLabels.pod

TypeDefault
object{}

extraLabels.pod are labels to set on the Pods.

extraLabels.podDisruptionBudget

TypeDefault
object{}

extraLabels.podDisruptionBudget are labels to set on the PodDisruptionBudget.

extraLabels.secret

TypeDefault
object{}

extraLabels.secret are labels to set on the Secret.

extraLabels.service

TypeDefault
object{}

extraLabels.service are labels to set on the Service.

extraLabels.serviceAccount

TypeDefault
object{}

extraLabels.serviceAccount are labels to set on the ServiceAccount.

annotations

annotations contains annotations to apply to the different Kubernetes objects created by the chart. See the Kubernetes annotation documentation for more details.

annotations.config

TypeDefault
object{}

annotations.config are annotations to set on the ConfigMap.

annotations.deployment

TypeDefault
object{}

annotations.deployment are annotations to set on the Deployment.

annotations.pod

TypeDefault
object{}

annotations.pod are annotations to set on the Pods.

annotations.podDisruptionBudget

TypeDefault
object{}

annotations.podDisruptionBudget are annotations to set on the podDisruptionBudget.

annotations.secret

TypeDefault
object{}

annotations.secret are annotations to set on the Secret.

annotations.service

TypeDefault
object{}

annotations.service are annotations to set on the Service.

annotations.serviceAccount

TypeDefault
object{}

annotations.serviceAccount are annotations to set on the ServiceAccount.

image

TypeDefault
string"public.ecr.aws/gravitational/teleport-distroless"

image sets the container image used for Teleport Community Edition Agent pods created by the chart.

You can override this to use your own Teleport image rather than a Teleport-published image.

By default, the image contains only the Teleport application and its runtime dependencies, and does not contain a shell.

This setting only takes effect when enterprise is false. When running an enterprise version, you must use enterpriseImage instead.

enterpriseImage

TypeDefault
string"public.ecr.aws/gravitational/teleport-ent-distroless"

enterpriseImage sets the container image used for Teleport Enterprise agent pods created by the chart.

You can override this to use your own Teleport image rather than a Teleport-published image.

By default, the image contains only the Teleport application and its runtime dependencies, and does not contain a shell.

This setting only takes effect when enterprise is true. When running an enterprise version, you must use image instead.

imagePullSecrets

TypeDefault
list[]

imagePullSecrets is a list of secrets containing authorization tokens which can be optionally used to access a private Docker registry.

See the Kubernetes reference for more details.

imagePullPolicy

TypeDefault
string"IfNotPresent"

imagePullPolicy sets the pull policy for any pods created by the chart. See the Kubernetes documentation for more details.

topologySpreadConstraints

TypeDefault
list[]

topologySpreadConstraints sets the topology spread constraints for any pods created by the chart. See the Kubernetes documentation for more details.

When unset, the chart defaults to a soft topology spread constraint that tries to spread pods across hosts and zones.

topologySpreadConstraints:
  - maxSkew: 1
    topologyKey: kubernetes.io/hostname
    whenUnsatisfiable: ScheduleAnyway
    labelSelector:
      matchLabels: # dynamically computed
  - maxSkew: 1
    topologyKey: topology.kubernetes.io/zone
    whenUnsatisfiable: ScheduleAnyway
    labelSelector:
      matchLabels: # dynamically computed

disableTopologySpreadConstraints

TypeDefault
boolfalse

disableTopologySpreadConstraints turns off the default topology spread constraints.

affinity

TypeDefault
object{}

affinity sets the affinities for any pods created by the chart. See the Kubernetes documentation for more details.

tolerations

TypeDefault
list[]

tolerations sets the tolerations for any pods created by the chart. See the Kubernetes documentation for more details.

teleportConfig

TypeDefault
object{}

teleportConfig contains YAML teleport configuration to pass to the Teleport pods. The configuration will be merged with the chart-generated configuration and will take precedence in case of conflict.

See the Teleport Configuration Reference for the list of supported fields.

extraArgs

TypeDefault
list[]

extraArgs contains extra arguments to pass to teleport start for the main Teleport container.

extraEnv

TypeDefault
list[]

extraEnv contains extra environment variables to set in the main Teleport container.

For example:

extraEnv:
  - name: HTTPS_PROXY
    value: "http://username:[email protected]:3128"

extraVolumes

TypeDefault
list[]

extraVolumes contains extra volumes to mount into the Teleport pods. See the Kubernetes volume documentation for more details.

For example:

extraVolumes:
- name: myvolume
  secret:
    secretName: testSecret

extraVolumeMounts

TypeDefault
list[]

extraVolumeMounts contains extra volumes mounts for the main Teleport container. See the Kubernetes volume documentation for more details.

For example:

extraVolumesMounts:
- name: myvolume
  mountPath: /path/on/host

dnsConfig

TypeDefault
object{}

dnsConfig contains custom Pod DNS Configuration for the agent pods. This value is useful if you need to reduce the DNS load: set "ndots" to 0 and only use FQDNs to refer to remote hosts.

See the Kubernetes pod DNS documentation for more information.

For example:

 nameservers:
   - 1.2.3.4
 searches:
   - ns1.svc.cluster-domain.example
   - my.dns.search.suffix
 options:
   - name: ndots
     value: "2"

dnsPolicy

TypeDefault
string""

dnsPolicy sets the Pod's DNS Policy

See the Kubernetes pod DNS documentation for more information.

hostAliases

hostAliases sets Host aliases in the Teleport Pod. See the Kubernetes hosts file documentation for more details.

For example:

hostAliases:
  - ip: "127.0.0.1"
    hostnames:
      - "foo.local"
      - "bar.local"
  - ip: "10.1.2.3"
    hostnames:
      - "foo.remote"
      - "bar.remote"

tls

tls contains settings for mounting your own TLS material in the agent pod.

tls.existingCASecretName

TypeDefault
string""

tls.existingCASecretName sets the SSL_CERT_FILE environment variable to load a trusted CA or bundle in PEM format into Teleport pods. The injected CA will be used to validate TLS communications with the Proxy Service.

You must create a secret containing the CA certs in the same namespace as Teleport using a command like:

kubectl create secret generic my-root-ca --from-file=ca.pem=/path/to/root-ca.pem

tls.existingCASecretKeyName

TypeDefault
string"ca.pem"

tls.existingCASecretKeyName determines which key in the CA secret will be used as a trusted CA bundle file.

insecureSkipProxyTLSVerify

TypeDefault
boolfalse

insecureSkipProxyTLSVerify disables TLS verification of the TLS certificate presented by the Proxy Service.

This can be used for joining a Teleport instance to a Teleport cluster which does not have valid TLS certificates for testing.

warning

Using a self-signed TLS certificate and disabling TLS verification is OK for testing, but is not viable when running a production Teleport cluster as it will drastically reduce security. You must configure valid TLS certificates on your Teleport cluster for production workloads.

One option might be to use Teleport's built-in ACME support or enable cert-manager support.

securityContext

TypeDefault
object{"allowPrivilegeEscalation":false,"capabilities":{"drop":["ALL"]},"readOnlyRootFilesystem":true,"runAsGroup":65532,"runAsNonRoot":true,"runAsUser":65532,"seccompProfile":{"type":"RuntimeDefault"}}

securityContext sets the container security context for any pods created by the chart. See the Kubernetes documentation for more details.

The default value is compatible with the restricted PSS.

To unset the security context, set it to null or ~.

podSecurityContext

TypeDefault
object{"fsGroup":65532}

podSecurityContext sets the pod security context for any pods created by the chart. See the Kubernetes documentation for more details.

To unset the security context, set it to null or ~.

priorityClassName

TypeDefault
string""

priorityClassName sets the priority class used by any pods created by the chart. The user is responsible for creating the PriorityClass resource before deploying the chart. See the Kubernetes documentation for more details.

nameOverride

TypeDefault
string""

nameOverride optionally overrides the name of the chart, used together with the release name when giving a name to resources.

fullnameOverride

TypeDefault
string""

fullnameOverride optionally overrides the full name of resources.

teleportVersionOverride

TypeDefault
string""

teleportVersionOverride controls the Teleport Kubernetes Operator image version deployed by the chart.

Normally, the version of the Teleport Kubernetes Operator matches the version of the chart. If you install chart version 15.0.0, you'll use Teleport version 15.0.0. Upgrading the agent is done by upgrading the chart.

warning

teleportVersionOverride is intended for development and MUST NOT be used to control the Teleport version in a typical deployment. This chart is designed to run a specific Teleport version. You will face compatibility issues trying to run a different Teleport version with it.

If you want to run Teleport version X.Y.Z, you should use helm install --version X.Y.Z instead.