The Ambassador Edge Stack is a self-service, comprehensive edge stack that is Kubernetes-native and built on Envoy Proxy.
$ helm repo add datawire https://getambassador.io
$ helm install ambassador datawire/ambassadorThis chart bootstraps an Ambassador deployment on a Kubernetes cluster using the Helm package manager.
- Kubernetes 1.11+
helm repo add datawire https://getambassador.ioTo install the chart with the release name my-release:
$ kubectl create namespace ambassador
$ helm install my-release datawire/ambassador -n ambassadorThe command deploys Ambassador Edge Stack in the ambassador namespace on the Kubernetes cluster in the default configuration.
It is recommended to use the ambassador namespace for easy upgrades.
The configuration section lists the parameters that can be configured during installation.
This chart defaults to installing The Ambassador Edge Stack with all of its configuration objects.
- A Redis instance
AuthServiceresource for enabling authenticationRateLimitServiceresource for enabling rate limitingMappings for internal request routing
If installing alongside another deployment of Ambassador, some of these resources can cause configuration errors since only one AuthService or RateLimitService can be configured at a time.
If you already have one of these resources configured in your cluster, please see the configuration section below for information on how to disable them in the chart.
This chart can still be used to install Ambassador OSS.
To install OSS, change the image to use the OSS image and set enableAES: false to skip the install of any AES resources.
To uninstall/delete the my-release deployment:
$ helm uninstall my-releaseThe command removes all the Kubernetes components associated with the chart and deletes the release.
Notable chart changes are listed in the CHANGELOG
The following tables lists the configurable parameters of the Ambassador chart and their default values.
| Parameter | Description | Default |
|---|---|---|
nameOverride |
Override the generated chart name. Defaults to .Chart.Name. | |
fullnameOverride |
Override the generated release name. Defaults to .Release.Name. | |
adminService.create |
If true, create a service for Ambassador's admin UI |
true |
adminService.nodePort |
If explicit NodePort for admin service is required | true |
adminService.type |
Ambassador's admin service type to be used | ClusterIP |
adminService.annotations |
Annotations to apply to Ambassador admin service | {} |
adminService.loadBalancerIP |
IP address to assign (if cloud provider supports it) | "" |
adminService.loadBalancerSourceRanges |
Passed to cloud provider load balancer if created (e.g: AWS ELB) | None |
ambassadorConfig |
Config thats mounted to /ambassador/ambassador-config |
"" |
crds.enabled |
If true, enables CRD resources for the installation. |
true |
crds.create |
If true, Creates CRD resources |
true |
crds.keep |
If true, if the ambassador CRDs should be kept when the chart is deleted |
true |
daemonSet |
If true, Create a DaemonSet. By default Deployment controller will be created |
false |
hostNetwork |
If true, uses the host network, useful for on-premise setups |
false |
dnsPolicy |
Dns policy, when hostNetwork set to ClusterFirstWithHostNet | ClusterFirst |
env |
Any additional environment variables for ambassador pods | {} |
image.pullPolicy |
Ambassador image pull policy | IfNotPresent |
image.repository |
Ambassador image | quay.io/datawire/aes |
image.tag |
Ambassador image tag | 1.4.2 |
imagePullSecrets |
Image pull secrets | [] |
namespace.name |
Set the AMBASSADOR_NAMESPACE environment variable |
metadata.namespace |
scope.singleNamespace |
Set the AMBASSADOR_SINGLE_NAMESPACE environment variable and create namespaced RBAC if rbac.enabled: true |
false |
podAnnotations |
Additional annotations for ambassador pods | {} |
deploymentAnnotations |
Additional annotations for ambassador DaemonSet/Deployment | {} |
podLabels |
Additional labels for ambassador pods | |
affinity |
Affinity for ambassador pods | {} |
nodeSelector |
NodeSelector for ambassador pods | {} |
priorityClassName |
The name of the priorityClass for the ambassador DaemonSet/Deployment | "" |
rbac.create |
If true, create and use RBAC resources |
true |
rbac.podSecurityPolicies |
pod security polices to bind to | |
rbac.nameOverride |
Overrides the default name of the RBAC resources | `` |
replicaCount |
Number of Ambassador replicas | 3 |
resources |
CPU/memory resource requests/limits | {} |
securityContext |
Set security context for pod | { "runAsUser": "8888" } |
restartPolicy |
Set the restartPolicy for pods |
`` |
initContainers |
Containers used to initialize context for pods | [] |
sidecarContainers |
Containers that share the pod context | [] |
livenessProbe.initialDelaySeconds |
Initial delay (s) for Ambassador pod's liveness probe | 30 |
livenessProbe.periodSeconds |
Probe period (s) for Ambassador pod's liveness probe | 3 |
livenessProbe.failureThreshold |
Failure threshold for Ambassador pod's liveness probe | 3 |
readinessProbe.initialDelaySeconds |
Initial delay (s) for Ambassador pod's readiness probe | 30 |
readinessProbe.periodSeconds |
Probe period (s) for Ambassador pod's readiness probe | 3 |
readinessProbe.failureThreshold |
Failure threshold for Ambassador pod's readiness probe | 3 |
service.annotations |
Annotations to apply to Ambassador service | "" |
service.externalTrafficPolicy |
Sets the external traffic policy for the service | "" |
service.ports |
List of ports Ambassador is listening on | [{"name": "http","port": 80,"targetPort": 8080},{"name": "https","port": 443,"targetPort": 8443}] |
service.loadBalancerIP |
IP address to assign (if cloud provider supports it) | "" |
service.loadBalancerSourceRanges |
Passed to cloud provider load balancer if created (e.g: AWS ELB) | None |
service.type |
Service type to be used | LoadBalancer |
serviceAccount.create |
If true, create a new service account |
true |
serviceAccount.name |
Service account to be used | ambassador |
volumeMounts |
Volume mounts for the ambassador service | [] |
volumes |
Volumes for the ambassador service | [] |
enableAES |
Create the AES configuration objects | true |
createDevPortalMappings |
Expose the dev portal on /docs/ and /documentation/ |
true |
licenseKey.value |
Ambassador Edge Stack license. Empty will install in evaluation mode. | `` |
licenseKey.createSecret |
Set to false if installing mutltiple Ambassdor Edge Stacks in a namespace. |
true |
licenseKey.secretName |
Name of the secret to store Ambassador license key in. | `` |
redisURL |
URL of redis instance not created by the release | "" |
redis.create |
Create a basic redis instance with default configurations | true |
redis.annotations |
Annotations for the redis service and deployment | "" |
redis.resources |
Resource requests for the redis instance | "" |
redis.nodeSelector |
NodeSelector for redis pods | {} |
authService.create |
Create the AuthService CRD for Ambassador Edge Stack |
true |
authService.optional_configurations |
Config options for the AuthService CRD |
"" |
rateLimit.create |
Create the RateLimit CRD for Ambassador Edge Stack |
true |
autoscaling.enabled |
If true, creates Horizontal Pod Autoscaler | false |
autoscaling.minReplica |
If autoscaling enabled, this field sets minimum replica count | 2 |
autoscaling.maxReplica |
If autoscaling enabled, this field sets maximum replica count | 5 |
autoscaling.metrics |
If autoscaling enabled, configure hpa metrics | |
podDisruptionBudget |
Pod disruption budget rules | {} |
prometheusExporter.enabled |
DEPRECATED: Prometheus exporter side-car enabled | false |
prometheusExporter.pullPolicy |
DEPRECATED: Image pull policy | IfNotPresent |
prometheusExporter.repository |
DEPRECATED: Prometheus exporter image | prom/statsd-exporter |
prometheusExporter.tag |
DEPRECATED: Prometheus exporter image | v0.8.1 |
prometheusExporter.resources |
DEPRECATED: CPU/memory resource requests/limits | {} |
metrics.serviceMonitor.enabled |
Create ServiceMonitor object (adminService.create should be to true) |
false |
metrics.serviceMonitor.interval |
Interval at which metrics should be scraped | 30s |
metrics.serviceMonitor.scrapeTimeout |
Timeout after which the scrape is ended | 30s |
metrics.sendStatsdToHostIP |
If true, enables statsd and sends metrics to hostIP | false |
NOTE: Make sure the configured service.http.targetPort and service.https.targetPort ports match your Ambassador Module's service_port and redirect_cleartext_from configurations.
The Ambassador Edge Stack provides a comprehensive, self-service edge stack in the Kubernetes cluster with a decentralized deployment model and a declarative paradigm.
By default, this chart will install the latest image of The Ambassador Edge Stack which will replace your existing deployment of Ambassador with no changes to functionality.
This helm chart includes the creation of the core CRDs Ambassador uses for configuration.
The crds flags (Helm 2 only) let you configure how a release manages crds.
crds.createCan only be set on your first/master Ambassador release.crds.enabledShould be set on all releases using Ambassador CRDscrds.keepConfigures if the CRDs are deleted when the master release is purged. This value is only checked for the master release and can be set to any value on secondary releases.
Ambassador is configured using Kubernetes Custom Resource Definitions (CRDs). If you are unable to use CRDs, Ambassador can also be configured using annotations on services. The service.annotations section of the values file contains commented out examples of Ambassador Module and a global TLSContext configurations which are typically created in the Ambassador service.
If you intend to use service.annotations, remember to include the getambassador.io/config annotation key as above.
Using the Prometheus Exporter has been deprecated and is no longer recommended. You can now use metrics.serviceMonitor.enabled to create a ServiceMonitor from the chart if the Prometheus Operator has been installed on your cluster.
Please see Ambassador's monitoring with Prometheus docs for more information on using the /metrics endpoint for metrics collection.
Specify each parameter using the --set key=value[,key=value] argument to helm install. For example,
$ helm install --wait my-release \
--set adminService.type=NodePort \
datawire/ambassadorAlternatively, a YAML file that specifies the values for the above parameters can be provided while installing the chart. For example,
$ helm install --wait my-release -f values.yaml datawire/ambassadorIntroduces Ambassador Edge Stack being installed by default.
Ambassador Pro support has been removed in 6.0.0. Please upgrade to the Ambassador Edge Stack.
Note If upgrading an existing helm 2 installation no action is needed, previously installed CRDs will not be modified.
- Helm 3 support for CRDs was added. Specifically, the CRD templates were moved to non-templated files in the
/crdsdirectory, and to keep Helm 2 support they are globbed from there by/templates/crds.yaml. However, because Helm 3 CRDs are not templated, the labels for new installations have necessarily changed
The 4.0.0 chart contains a number of changes to the way Ambassador Pro is installed.
- Introduces the performance tuned and certified build of open source Ambassador, Ambassador core
- The license key is now stored and read from a Kubernetes secret by default
- Added
.Values.pro.licenseKey.secret.enabled.Values.pro.licenseKey.secret.createfields to allow multiple releases in the same namespace to use the same license key secret. - Introduces the ability to configure resource limits for both Ambassador Pro and it's redis instance
- Introduces the ability to configure additional
AuthServiceoptions (see AuthService documentation) - The ambassador-pro-auth
AuthServiceand ambassador-pro-ratelimitRateLimitServiceand now created as CRDs when.Values.crds.enabled: true - Fixed misnamed selector for redis instance that failed in an edge case
- Exposes annotations for redis deployment and service
The value of .Values.pro.image.tag has been shortened to assume amb-sidecar (and amb-core for Ambassador core)
values.yaml
<3.0.0>
image:
repository: quay.io/datawire/ambassador_pro
- tag: amb-sidecar-0.6.0
<4.0.0+>
image:
repository: quay.io/datawire/ambassador_pro
+ tag: 0.7.0Method for creating a Kubernetes secret to hold the license key has been changed
values.yaml
<3.0.0>
- secret: false
<4.0.0>
+ secret:
+ enabled: true
+ create: trueThe way ports are assigned has been changed for a more dynamic method.
Now, instead of setting the port assignments for only the http and https, any port can be open on the load balancer using a list like you would in a standard Kubernetes YAML manifest.
pre-3.0.0
service:
http:
enabled: true
port: 80
targetPort: 8080
https:
enabled: true
port: 443
targetPort: 84433.0.0
service:
ports:
- name: http
port: 80
targetPort: 8080
- name: https
port: 443
targetPort: 8443This change has also replaced the .additionalTCPPorts configuration. Additional TCP ports can be created the same as the http and https ports above.
The below Ambassador Module annotation is no longer being applied by default.
getambassador.io/config: |
---
apiVersion: ambassador/v1
kind: Module
name: ambassador
config:
service_port: 8080This was causing confusion with the service_port being hard-coded when enabling TLS termination in Ambassador.
Ambassador has been listening on port 8080 for HTTP and 8443 for HTTPS by default since version 0.60.0 (chart version 2.2.0).
A ClusterRole and ClusterRoleBinding named {{release name}}-crd will be created to watch for the Ambassador Custom Resource Definitions. This will be created regardless of the value of scope.singleNamespace since CRDs are created the cluster scope.
rbac.namespaced has been removed. For namespaced RBAC, set scope.singleNamespace: true and rbac.enabled: true.
crds.enabled will indicate that you are using CRDs and will create the rbac resources regardless of the value of crds.create. This allows for multiple deployments to use the CRDs.
ambassador.id has been removed in favor of setting it via an environment variable in env. AMBASSADOR_ID defaults to default if not set in the environment. This is mainly used for running multiple Ambassadors in the same cluster.
| Parameter | Env variables |
|---|---|
ambassador.id |
AMBASSADOR_ID |
Chart now runs ambassador as non-root by default, so you might need to update your ambassador module config to match this.
Timings values have been removed in favor of setting the env variables using `env´
| Parameter | Env variables |
|---|---|
timing.restart |
AMBASSADOR_RESTART_TIME |
timing.drain |
AMBASSADOR_DRAIN_TIME |
timing.shutdown |
AMBASSADOR_SHUTDOWN_TIME |
| Parameter | Env variables |
|---|---|
namespace.single |
AMBASSADOR_SINGLE_NAMESPACE |
Service ports values have changed names and target ports have new defaults.
| Previous parameter | New parameter | New default value |
|---|---|---|
service.enableHttp |
service.http.enabled |
|
service.httpPort |
service.http.port |
|
service.httpNodePort |
service.http.nodePort |
|
service.targetPorts.http |
service.http.targetPort |
8080 |
service.enableHttps |
service.https.enabled |
|
service.httpsPort |
service.https.port |
|
service.httpsNodePort |
service.https.nodePort |
|
service.targetPorts.https |
service.https.targetPort |
8443 |
Pre version 0.50.0 ambassador was using socat and required a sidecar to export statsd metrics. In 0.50.0 ambassador no longer uses socat and doesn't need a sidecar anymore to export its statsd metrics. Statsd metrics are disabled by default and can be enabled by setting environment STATSD_ENABLED, this will (in 0.50) send metrics to a service named statsd-sink, if you want to send it to another service or namespace it can be changed by setting STATSD_HOST
If you are using prometheus the chart allows you to enable a sidecar which can export to prometheus see the prometheusExporter values.