diff --git a/README.md b/README.md
index a8b97bd0..ad14b0db 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
# emissary-ingress.dev
-The [emissary-ingress.dev][] website, built using [Hugo][] and hosted on [Netlify][].
+The [emissary-ingress.dev](https://emissary-ingress.dev) website, built using [Hugo][] and hosted on [Netlify][].
## Local build
diff --git a/content/en/docs/2.5/about/_index.md b/content/en/docs/2.5/about/_index.md
new file mode 100644
index 00000000..0ba607e7
--- /dev/null
+++ b/content/en/docs/2.5/about/_index.md
@@ -0,0 +1,4 @@
+---
+title: "About"
+weight: 10
+---
diff --git a/content/en/docs/2.5/about/aes-emissary-eol.md b/content/en/docs/2.5/about/aes-emissary-eol.md
deleted file mode 100644
index 59dfbeed..00000000
--- a/content/en/docs/2.5/about/aes-emissary-eol.md
+++ /dev/null
@@ -1,56 +0,0 @@
-# Ambassador Edge Stack and Emissary-ingress End of Life Policy
-
-This document describes the End of Life policy and maintenance windows for Ambassador Edge Stack, and to the open source project Emissary-ingress.
-
-## Supported Versions
-
-Ambassador Edge Stack and Emissary-ingress versions are expressed as **x.y.z**, where **x** is the major version, **y** is the minor version, and **z** is the patch version, following [Semantic Versioning](https://semver.org/) terminology.
-
-**X-series (Major Versions)**
-
-- **1.y**: 1.0 GA on January 2020
-- **2.y**: 2.0.4 GA on October 2021, and 2.1.0 in December 2021.
-
-**Y-release (Minor versions)**
-
-- For 1.y, that is **1.14.z**
-- For 2.y, that is **2.3.z**
-
-In this document, **Current** refers to the latest X-series release.
-
-Maintenance refers to the previous X-series release, including security and Sev1 defect patches.
-
-## CNCF Ecosystem Considerations
-
-- Envoy releases a major version every 3 months and supports its previous releases for 12 months. Envoy does not support any release longer than 12 months.
-- Kubernetes 1.19 and newer receive 12 months of patch support (The [Kubernetes Yearly Support Period](https://github.com/kubernetes/enhancements/blob/master/keps/sig-release/1498-kubernetes-yearly-support-period/README.md)).
-
-# The Policy
-
-> We will offer a 6 month maintenance window for the latest Y-release of an X-series after a new X-series goes GA and becomes the current release. For example, we will support 2.3 for severity 1 and defect patches for six months after 3.0 is released.
->
-
-> During the maintenance window, Y-releases will only receive security and Sev1 defect patches. Users desiring new features or bug fixes for lower severity defects will need to upgrade to the current X-series.
->
-
-> The current X-series will receive as many Y-releases as necessary and as often as we have new features or patches to release.
->
-
-> Ambassador Labs offers no-downtime migration to current versions from maintenance releases. Migration from releases that are outside of the maintenance window may be subject to downtime.
->
-
-> Artifacts of releases outside of the maintenance window will be frozen and will remain available publicly for download with the best effort. These artifacts include Docker images, application binaries, Helm charts, etc.
->
-
-### When we say support with “defect patches”, what do we mean?
-
-- We will fix security issues in our Emissary-ingress and Ambassador Edge Stack code
-- We will pick up security fixes from dependencies as they are made available
-- We will not maintain forks of our major dependencies
-- We will not attempt our own back ports of critical fixes to dependencies which are out of support from their own communities
-
-## Extended Maintenance for 1.14
-
-Given this policy, we should have dropped maintenance for 1.14 in March 2022, however we recognize that the introduction of an EOL policy necessitates a longer maintenance window. For this reason, we do offer an "extended maintenance" window for 1.14 until the end of September 2022, 3 months after the latest 2.3 release. Please note that this extended maintenance window will not apply to customers using Kubernetes 1.22 and above, and this extended maintenance will also not provide a no-downtime migration path from 1.14 to 3.0.
-
-After September 2022, the current series will be 3.x, and the maintenance series will be 2.y.
diff --git a/content/en/docs/2.5/about/alternatives.md b/content/en/docs/2.5/about/alternatives.md
index bafec087..b3bc2e7d 100644
--- a/content/en/docs/2.5/about/alternatives.md
+++ b/content/en/docs/2.5/about/alternatives.md
@@ -1,6 +1,8 @@
-# $productName$ vs. other software
+---
+title: "Alternatives"
+---
-Alternatives to $productName$ fall into three basic categories:
+Alternatives to Emissary fall into three basic categories:
* Hosted API gateways, such as the [Amazon API gateway](https://aws.amazon.com/api-gateway/).
* Traditional API gateways, such as [Kong](https://konghq.org/).
@@ -12,8 +14,8 @@ Both hosted API gateways and traditional API gateways are:
* Not Kubernetes-native. They're typically configured using REST APIs, making it challenging to adopt cloud-native patterns such as GitOps and declarative configuration.
* [Designed for API management, rather than designed for microservices](../../topics/concepts/microservices-api-gateways).
-A Layer 7 proxy can be used as an API gateway, but typically requires additional bespoke development to support microservices use cases. In fact, many API gateways package the additional features needed for an API gateway on top of an L7 proxy. $productName$ uses Envoy, while Kong uses NGINX. If you're interested in deploying Envoy directly, we've written an [introductory tutorial](https://www.datawire.io/guide/traffic/getting-started-lyft-envoy-microservices-resilience/).
+A Layer 7 proxy can be used as an API gateway, but typically requires additional bespoke development to support microservices use cases. In fact, many API gateways package the additional features needed for an API gateway on top of an L7 proxy. Emissary uses Envoy, while Kong uses NGINX. If you're interested in deploying Envoy directly, we've written an [introductory tutorial](https://www.datawire.io/guide/traffic/getting-started-lyft-envoy-microservices-resilience/).
## Istio
-[Istio](https://istio.io) is an open-source service mesh, built on Envoy. A service mesh is designed to manage East/West traffic (traffic between servers and your data center), while an API gateway manages North/South traffic (in and out of your data center). Documentation on how to deploy $productName$ with Istio is [here](../../howtos/istio). In general, we've found that North/South traffic is quite different from East/West traffic (i.e., you don't control the client in the North/South use case).
+[Istio](https://istio.io) is an open-source service mesh, built on Envoy. A service mesh is designed to manage East/West traffic (traffic between servers and your data center), while an API gateway manages North/South traffic (in and out of your data center). Documentation on how to deploy Emissary with Istio is [here](../../howtos/istio). In general, we've found that North/South traffic is quite different from East/West traffic (i.e., you don't control the client in the North/South use case).
diff --git a/content/en/docs/2.5/about/changes-2.x.md b/content/en/docs/2.5/about/changes-2.x.md
index 389cc89b..bb7312a8 100644
--- a/content/en/docs/2.5/about/changes-2.x.md
+++ b/content/en/docs/2.5/about/changes-2.x.md
@@ -1,28 +1,27 @@
-import Alert from '@material-ui/lab/Alert';
-
-Major Changes in $productName$ 2.X
-==================================
+---
+title: Major Changes in Emissary 2.X
+---
-The 2.X family introduces a number of changes to allow $productName$
+The 2.X family introduces a number of changes to allow Emissary
to more gracefully handle larger installations, reduce global configuration to
better handle multitenant or multiorganizational installations, reduce memory
footprint, and improve performance. We welcome feedback!! Join us on
[Slack](http://a8r.io/slack) and let us know what you think.
-While $productName$ 2 is functionally compatible with $productName$ 1.14, note
+While Emissary 2 is functionally compatible with Emissary 1.14, note
that this is a **major version change** and there are important differences between
-$productName$ 1.X and $productName$ $version$. For details, read on.
+Emissary 1.X and Emissary $version$. For details, read on.
## 1. Configuration API Version `getambassador.io/v3alpha1`
-$productName$ 2.0 introduced API version `getambassador.io/v3alpha1` to allow
+Emissary 2.0 introduced API version `getambassador.io/v3alpha1` to allow
certain changes in configuration resources that are not backwards compatible with
-$productName$ 1.X. The most notable example of change is the addition of the
+Emissary 1.X. The most notable example of change is the addition of the
**mandatory** `Listener` resource; however, there are important changes
in `Host` and `Mapping` as well.
- $productName$ 2.X supports only API versions getambassador.io/v2
+ Emissary 2.X supports only API versions getambassador.io/v2
and getambassador.io/v3alpha1
. If you are using any resources with
older API versions, you will need to upgrade them.
@@ -47,15 +46,15 @@ either a string or a list of strings is not allowed. Several such elements appea
## 2. `Listener`s, `Host`s, and `Mapping`s
-$productName$ 2.0 introduced the new **mandatory** `Listener` CRD, and made some changes
+Emissary 2.0 introduced the new **mandatory** `Listener` CRD, and made some changes
to the `Host` and `Mapping` resources.
### The `Listener` CRD
-The new [`Listener` CRD](../../topics/running/listener) defines where and how $productName$ should listen for requests from the network, and which `Host` definitions should be used to process those requests.
+The new [`Listener` CRD](../../topics/running/listener) defines where and how Emissary should listen for requests from the network, and which `Host` definitions should be used to process those requests.
-**Note that `Listener`s are never created by $productName$, and must be defined by the user.** If you do not
-define any `Listener`s, $productName$ will not listen anywhere for connections, and therefore won't do
+**Note that `Listener`s are never created by Emissary, and must be defined by the user.** If you do not
+define any `Listener`s, Emissary will not listen anywhere for connections, and therefore won't do
anything useful. It will log a `WARNING` to this effect.
A `Listener` specifically defines
@@ -82,7 +81,7 @@ spec:
from: ALL
```
-A `Listener` that has no associated `Host`s will be logged as a `WARNING`, and will not be included in the Envoy configuration generated by $productName$.
+A `Listener` that has no associated `Host`s will be logged as a `WARNING`, and will not be included in the Envoy configuration generated by Emissary.
Note also that there is no limit on how many `Listener`s may be created, and as such no limit on the number of ports to which a `Host` may be associated.
@@ -93,11 +92,11 @@ Note also that there is no limit on how many `Listener`s may be created, and as
### Wildcard `Host`s No Longer Created
-In $productName$ 1.X, $productName$ would make sure that a wildcard `Host`, with a `hostname` of `"*"`, was always present.
-$productName$ 2.X does **not** force a wildcard `Host`: if you need the wildcard behavior, you will need to create
+In Emissary 1.X, Emissary would make sure that a wildcard `Host`, with a `hostname` of `"*"`, was always present.
+Emissary 2.X does **not** force a wildcard `Host`: if you need the wildcard behavior, you will need to create
a `Host` with a hostname of `"*"`.
-Of particular note is that $productName$ **will not** respond to queries to an IP address unless a wildcard
+Of particular note is that Emissary **will not** respond to queries to an IP address unless a wildcard
`Host` is present. If `foo.example.com` resolves to `10.11.12.13`, and the only `Host` has a
`hostname` of `foo.example.com`, then:
@@ -114,7 +113,7 @@ Adding a `Host` with a `hostname` of `"*"` will allow the second query to work.
The [`Host` CRD](../../topics/running/host-crd) continues to define information about hostnames, TLS certificates, and how to handle requests that are "secure" (using HTTPS) or "insecure" (using HTTP). The [`Mapping` CRD](../../topics/using/intro-mappings) continues to define how to map the URL space to upstream services.
-However, as of $productName$ 2.0, a `Mapping` will not be associated with a `Host` unless at least one of the following is true:
+However, as of Emissary 2.0, a `Mapping` will not be associated with a `Host` unless at least one of the following is true:
- The `Mapping` specifies a `hostname` attribute that matches the `Host` in question.
@@ -145,7 +144,7 @@ Each `Host` can specify its `requestPolicy.insecure.action` independently of any
### `Host`, `TLSContext`, and TLS Termination
-As of $productName$ 2.0, **`Host`s are required for TLS termination**. It is no longer sufficient to create a [`TLSContext`](../../topics/running/tls/#tlscontext) by itself; the [`Host`](../../topics/running/host-crd) is required.
+As of Emissary 2.0, **`Host`s are required for TLS termination**. It is no longer sufficient to create a [`TLSContext`](../../topics/running/tls/#tlscontext) by itself; the [`Host`](../../topics/running/host-crd) is required.
The minimal setup for TLS termination is therefore a Kubernetes `Secret` of type `kubernetes.io/tls`, and a `Host` that uses it:
@@ -168,7 +167,7 @@ spec:
name: minimal-secret
```
-It is **not** necessary to explicitly state a `TLSContext` in the `Host`: setting `tlsSecret` is enough. Of course, `TLSContext` is still the ideal way to share TLS configuration between more than one `Host`. For further examples, see [Configuring $productName$ Communications](../../howtos/configure-communications).
+It is **not** necessary to explicitly state a `TLSContext` in the `Host`: setting `tlsSecret` is enough. Of course, `TLSContext` is still the ideal way to share TLS configuration between more than one `Host`. For further examples, see [Configuring Emissary Communications](../../howtos/configure-communications).
Learn more about Host
.
@@ -197,15 +196,15 @@ for compatibility with Kubernetes 1.22.
### Envoy V3 API by Default
-By default, $productName$ 2.X will configure Envoy using the
-[V3 Envoy API](https://www.envoyproxy.io/docs/envoy/latest/api-v3/api). In $productName$
+By default, Emissary 2.X will configure Envoy using the
+[V3 Envoy API](https://www.envoyproxy.io/docs/envoy/latest/api-v3/api). In Emissary
2.X, you may switch back to Envoy V2 by setting the `AMBASSADOR_ENVOY_API_VERSION`
-environment variable to "V2"; in $productName$ 3.X, support for the Envoy V2 API (and
+environment variable to "V2"; in Emissary 3.X, support for the Envoy V2 API (and
the `AMBASSADOR_ENVOY_API_VERSION` environment variable) will be removed.
### More Performant Reconfiguration by Default
-In $productName$ 1.X, the environment variable `AMBASSADOR_FAST_RECONFIGURE` could be used to enable a higher performance implementation of the code $productName$ uses to validate and generate Envoy configuration. In $productName$ 2.X, this higher-performance mode is always enabled.
+In Emissary 1.X, the environment variable `AMBASSADOR_FAST_RECONFIGURE` could be used to enable a higher performance implementation of the code Emissary uses to validate and generate Envoy configuration. In Emissary 2.X, this higher-performance mode is always enabled.
### Changes to the `ambassador` `Module`, and the `tls` `Module`
@@ -213,7 +212,7 @@ It is no longer possible to configure TLS using the `tls` element of the `ambass
With the introduction of the `Listener` resource, a few settings have moved from the `Module` to the `Listener`.
-Configuration for the `PROXY` protocol is part of the `Listener` resource in $productName$ 2.X, so the `use_proxy_protocol` element of the `ambassador` `Module` is no longer supported. Note that the `Listener` resource can configure `PROXY` resource per-`Listener`, rather than having a single global setting. For further information, see the [`Listener` documentation](../../topics/running/listener).
+Configuration for the `PROXY` protocol is part of the `Listener` resource in Emissary 2.X, so the `use_proxy_protocol` element of the `ambassador` `Module` is no longer supported. Note that the `Listener` resource can configure `PROXY` resource per-`Listener`, rather than having a single global setting. For further information, see the [`Listener` documentation](../../topics/running/listener).
`xff_num_trusted_hops` has been removed from the `Module`, and its functionality has been moved to the `l7Depth` setting in the `Listener` resource.
@@ -223,16 +222,16 @@ Configuration for the `PROXY` protocol is part of the `Listener` resource in $pr
### `TLSContext` `redirect_cleartext_from` and `Host` `insecure.additionalPort`
-`redirect_cleartext_from` has been removed from the `TLSContext` resource; `insecure.additionalPort` has been removed from the `Host` CRD. Both of these cases are covered by adding additional `Listener`s. For further examples, see [Configuring $productName$ Communications](../../howtos/configure-communications).
+`redirect_cleartext_from` has been removed from the `TLSContext` resource; `insecure.additionalPort` has been removed from the `Host` CRD. Both of these cases are covered by adding additional `Listener`s. For further examples, see [Configuring Emissary Communications](../../howtos/configure-communications).
### Service Preview No Longer Supported
-Service Preview is no longer supported as of $productName$ 2.X, as its use cases are supported by Telepresence.
+Service Preview is no longer supported as of Emissary 2.X, as its use cases are supported by Telepresence.
### Edge Policy Console No Longer Supported
-The Edge Policy Console has been removed as of $productName$ 2.X, in favor of Ambassador Cloud.
+The Edge Policy Console has been removed as of Emissary 2.X, in favor of Ambassador Cloud.
### `Project` CRD No Longer Supported
-The `Project` CRD has been removed as of $productName$ 2.X, in favor of Argo.
+The `Project` CRD has been removed as of Emissary 2.X, in favor of Argo.
diff --git a/content/en/docs/3.4/about/aes-emissary-eol.md b/content/en/docs/2.5/about/emissary-eol.md
similarity index 98%
rename from content/en/docs/3.4/about/aes-emissary-eol.md
rename to content/en/docs/2.5/about/emissary-eol.md
index 6afc3142..8a40b4e1 100644
--- a/content/en/docs/3.4/about/aes-emissary-eol.md
+++ b/content/en/docs/2.5/about/emissary-eol.md
@@ -1,4 +1,6 @@
-# $productName$ End of Life Policy
+---
+title: Emissary End of Life Policy
+---
This document describes the End of Life policy and maintenance windows for Ambassador Edge Stack, and to the open source project Emissary-ingress.
diff --git a/content/en/docs/2.5/about/faq.md b/content/en/docs/2.5/about/faq.md
index 513c75c5..67796d55 100644
--- a/content/en/docs/2.5/about/faq.md
+++ b/content/en/docs/2.5/about/faq.md
@@ -1,56 +1,58 @@
-# Frequently Asked Questions
+---
+title: Frequently Asked Questions
+---
## General
-### Why $productName$?
+### Why Emissary?
Kubernetes shifts application architecture for microservices, as well as the
-development workflow for a full-cycle development. $productName$ is designed for
+development workflow for a full-cycle development. Emissary is designed for
the Kubernetes world with:
* Sophisticated traffic management capabilities (thanks to its use of [Envoy Proxy](https://www.envoyproxy.io)), such as load balancing, circuit breakers, rate limits, and automatic retries.
* A declarative, self-service management model built on Kubernetes Custom Resource Definitions, enabling GitOps-style continuous delivery workflows.
-We've written about [the history of $productName$](https://blog.getambassador.io/building-ambassador-an-open-source-api-gateway-on-kubernetes-and-envoy-ed01ed520844), [Why $productName$ In Depth](../why-ambassador), [Features and Benefits](../features-and-benefits) and about the [evolution of API Gateways](../../topics/concepts/microservices-api-gateways/).
+We've written about [the history of Emissary](https://blog.getambassador.io/building-ambassador-an-open-source-api-gateway-on-kubernetes-and-envoy-ed01ed520844), [Why Emissary In Depth](../why-ambassador), [Features and Benefits](../features-and-benefits) and about the [evolution of API Gateways](../../topics/concepts/microservices-api-gateways/).
-### What's the difference between $OSSproductName$ and $AESproductName$?
+### What's the difference between Emissary and Ambassador Edge Stack?
-$OSSproductName$ is a CNCF Incubating project and provides the open-source core of $AESproductName$. Originally we called $OSSproductName$ the "Ambassador API Gateway", but as the project evolved, we realized that the functionality we were building had extended far beyond an API Gateway. In particular, the $AESproductName$ is intended to provide all the functionality you need at the edge -- hence, an "edge stack." This includes an API Gateway, ingress controller, load balancer, developer portal, and more.
+Emissary is a CNCF Incubating project and provides the open-source core of Ambassador Edge Stack. Originally we called Emissary the "Ambassador API Gateway", but as the project evolved, we realized that the functionality we were building had extended far beyond an API Gateway. In particular, the Ambassador Edge Stack is intended to provide all the functionality you need at the edge -- hence, an "edge stack." This includes an API Gateway, ingress controller, load balancer, developer portal, and more.
-### How is $AESproductName$ licensed?
+### How is Ambassador Edge Stack licensed?
-The core $OSSproductName$ is open source under the Apache Software License 2.0. The GitHub repository for the core is [https://github.com/emissary-ingress/emissary](https://github.com/emissary-ingress/emissary). Some additional features of the $AESproductName$ (e.g., Single Sign-On) are not open source and available under a proprietary license.
+The core Emissary is open source under the Apache Software License 2.0. The GitHub repository for the core is [https://github.com/emissary-ingress/emissary](https://github.com/emissary-ingress/emissary). Some additional features of the Ambassador Edge Stack (e.g., Single Sign-On) are not open source and available under a proprietary license.
-### Can I use the add-on features for $AESproductName$ for free?
+### Can I use the add-on features for Ambassador Edge Stack for free?
-Yes! The core functionality of the $AESproductName$ is free and has no limits whatsoever. If you wish to use one of our additional, proprietary features such as Single Sign-On, you can get a free community license for up to 5 requests per second by registering your connected $AESproductName$ installation in [Ambassador Cloud](https://app.getambassador.io/cloud/). Please contact [sales](/contact-us/) if you need more than 5 RPS.
+Yes! The core functionality of the Ambassador Edge Stack is free and has no limits whatsoever. If you wish to use one of our additional, proprietary features such as Single Sign-On, you can get a free community license for up to 5 requests per second by registering your connected Ambassador Edge Stack installation in [Ambassador Cloud](https://app.getambassador.io/cloud/). Please contact [sales](/contact-us/) if you need more than 5 RPS.
For more details on core unlimited features and premium features, see the [editions page](/editions).
-### How does $productName$ use Envoy Proxy?
+### How does Emissary use Envoy Proxy?
-$productName$ uses [Envoy Proxy](https://www.envoyproxy.io) as its core proxy. Envoy is an open-source, high-performance proxy originally written by Lyft. Envoy is now part of the Cloud Native Computing Foundation.
+Emissary uses [Envoy Proxy](https://www.envoyproxy.io) as its core proxy. Envoy is an open-source, high-performance proxy originally written by Lyft. Envoy is now part of the Cloud Native Computing Foundation.
-### Is $productName$ production ready?
+### Is Emissary production ready?
[//]: # (+FIX+ Check for OSS)
-Yes. Thousands of organizations, large and small, run $productName$ in production.
+Yes. Thousands of organizations, large and small, run Emissary in production.
Public users include Chick-Fil-A, ADP, Microsoft, NVidia, and AppDirect, among others.
-### What is the performance of $productName$?
+### What is the performance of Emissary?
-There are many dimensions to performance. We published a benchmark of [$productName$ performance on Kubernetes](/resources/envoyproxy-performance-on-k8s/). Our internal performance regressions cover many other scenarios; we expect to publish more data in the future.
+There are many dimensions to performance. We published a benchmark of [Emissary performance on Kubernetes](/resources/envoyproxy-performance-on-k8s/). Our internal performance regressions cover many other scenarios; we expect to publish more data in the future.
-### What's the difference between a service mesh (such as Istio) and $productName$?
+### What's the difference between a service mesh (such as Istio) and Emissary?
[//]: # (+FIX+ Check for OSS)
Service meshes focus on routing internal traffic from service to service
-("east-west"). $productName$ focuses on traffic into your cluster ("north-south").
-While both a service mesh and $productName$ can route L7 traffic, the reality is that
-these use cases are quite different. Many users will integrate $productName$ with a
-service mesh. Production customers of $productName$ have integrated with Consul,
+("east-west"). Emissary focuses on traffic into your cluster ("north-south").
+While both a service mesh and Emissary can route L7 traffic, the reality is that
+these use cases are quite different. Many users will integrate Emissary with a
+service mesh. Production customers of Emissary have integrated with Consul,
Istio, and Linkerd2.
## Common Configurations
@@ -61,7 +63,7 @@ See the [Protecting the Diagnostics Interface](../../howtos/protecting-diag-acce
## Troubleshooting
-### How do I get help for $productName$?
+### How do I get help for Emissary?
We have an online [Slack community](http://a8r.io/slack) with thousands of
users. We try to help out as often as possible, although we can't promise a
@@ -70,10 +72,10 @@ contracts. [Contact sales](/contact-us/) for more information.
### What do I do when I get the error `no healthy upstream`?
-This error means that $productName$ could not connect to your backend service.
+This error means that Emissary could not connect to your backend service.
Start by verifying that your backend service is actually available and
responding by sending an HTTP response directly to the pod. Then, verify that
-$productName$ is routing by deploying a test service and seeing if the mapping
+Emissary is routing by deploying a test service and seeing if the mapping
works. Then, verify that your load balancer is properly routing requests to
-$productName$. In general, verifying each network hop between your client and
+Emissary. In general, verifying each network hop between your client and
backend service is critical to finding the source of the problem.
diff --git a/content/en/docs/2.5/about/features-and-benefits.md b/content/en/docs/2.5/about/features-and-benefits.md
index a25d7752..c418cd36 100644
--- a/content/en/docs/2.5/about/features-and-benefits.md
+++ b/content/en/docs/2.5/about/features-and-benefits.md
@@ -1,43 +1,45 @@
-# Features and benefits
+---
+title: Features and Benefits
+---
-In cloud-native organizations, developers frequently take on responsibility for the full development lifecycle of a service, from development to QA to operations. $productName$ was specifically designed for these organizations where developers have operational responsibility for their service(s).
+In cloud-native organizations, developers frequently take on responsibility for the full development lifecycle of a service, from development to QA to operations. Emissary was specifically designed for these organizations where developers have operational responsibility for their service(s).
-As such, the $productName$ is designed to be used by both developers and operators.
+As such, the Emissary is designed to be used by both developers and operators.
## Self-Service via Kubernetes Annotations
-$productName$ is built from the start to support _self-service_ deployments -- a developer working on a new service doesn't have to go to Operations to get their service added to the mesh, they can do it themselves in a matter of seconds. Likewise, a developer can remove their service from the mesh, or merge services, or separate services, as needed, at their convenience. All of these operations are performed via Kubernetes resources or annotations, so they can easily integrate with your existing development workflow.
+Emissary is built from the start to support _self-service_ deployments -- a developer working on a new service doesn't have to go to Operations to get their service added to the mesh, they can do it themselves in a matter of seconds. Likewise, a developer can remove their service from the mesh, or merge services, or separate services, as needed, at their convenience. All of these operations are performed via Kubernetes resources or annotations, so they can easily integrate with your existing development workflow.
## Flexible canary deployments
[//]: # (+FIX+ Forge is no more)
-Canary deployments are an essential component of cloud-native development workflows. In a canary deployment, a small percentage of production traffic is routed to a new version of a service to test it under real-world conditions. $productName$ allows developers to easily control and manage the amount of traffic routed to a given service through annotations. [This tutorial](https://www.datawire.io/faster/canary-workflow/) covers a complete canary workflow using the $productName$.
+Canary deployments are an essential component of cloud-native development workflows. In a canary deployment, a small percentage of production traffic is routed to a new version of a service to test it under real-world conditions. Emissary allows developers to easily control and manage the amount of traffic routed to a given service through annotations. [This tutorial](https://www.datawire.io/faster/canary-workflow/) covers a complete canary workflow using the Emissary.
## Kubernetes-native architecture
[//]: # (+FIX+ we've come to realize that it's better to scale vertically)
-$productName$ relies entirely on Kubernetes for reliability, availability, and scalability. For example, $productName$ persists all state in Kubernetes, instead of requiring a separate database. Scaling the $productName$ is as simple as changing the replicas in your deployment, or using a [horizontal pod autoscaler](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/).
+Emissary relies entirely on Kubernetes for reliability, availability, and scalability. For example, Emissary persists all state in Kubernetes, instead of requiring a separate database. Scaling the Emissary is as simple as changing the replicas in your deployment, or using a [horizontal pod autoscaler](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/).
-$productName$ uses [Envoy](https://www.envoyproxy.io) for all traffic routing and proxying. Envoy is a modern L7 proxy that is used in production at companies including Lyft, Apple, Google, and Stripe.
+Emissary uses [Envoy](https://www.envoyproxy.io) for all traffic routing and proxying. Envoy is a modern L7 proxy that is used in production at companies including Lyft, Apple, Google, and Stripe.
## gRPC and HTTP/2 support
-$productName$ fully supports gRPC and HTTP/2 routing, thanks to Envoy's extensive capabilities in this area. See [gRPC and $productName$](../../howtos/grpc) for more information.
+Emissary fully supports gRPC and HTTP/2 routing, thanks to Envoy's extensive capabilities in this area. See [gRPC and Emissary](../../howtos/grpc) for more information.
## Istio Integration
-$productName$ integrates with the [Istio](https://istio.io) service mesh as the edge proxy. In this configuration, $productName$ routes external traffic to the internal Istio service mesh. See [Istio and $productName$](../../howtos/istio) for details.
+Emissary integrates with the [Istio](https://istio.io) service mesh as the edge proxy. In this configuration, Emissary routes external traffic to the internal Istio service mesh. See [Istio and Emissary](../../howtos/istio) for details.
## Authentication
-$productName$ supports authenticating incoming requests using a custom authentication service. When configured, the $productName$ will check with your external authentication service prior to routing an incoming request. For more information, see the [authentication guide](../../topics/running/services/auth-service).
+Emissary supports authenticating incoming requests using a custom authentication service. When configured, the Emissary will check with your external authentication service prior to routing an incoming request. For more information, see the [authentication guide](../../topics/running/services/auth-service).
## Rate limiting
-$productName$ supports rate limiting incoming requests. When configured, the $productName$ will check with a third party rate limit service prior to routing an incoming request. For more information, see the [rate limiting guide](../../topics/using/rate-limits/).
+Emissary supports rate limiting incoming requests. When configured, the Emissary will check with a third party rate limit service prior to routing an incoming request. For more information, see the [rate limiting guide](../../topics/using/rate-limits/).
## Integrated UI
-$productName$ includes a diagnostics service so that you can quickly debug issues associated with configuring the $productName$. For more information, see [running $productName$ in Production](../../topics/running).
+Emissary includes a diagnostics service so that you can quickly debug issues associated with configuring the Emissary. For more information, see [running Emissary in Production](../../topics/running).
diff --git a/content/en/docs/2.5/about/known-issues.md b/content/en/docs/2.5/about/known-issues.md
index 6b89c65a..74cbc459 100644
--- a/content/en/docs/2.5/about/known-issues.md
+++ b/content/en/docs/2.5/about/known-issues.md
@@ -1,9 +1,8 @@
-import Alert from '@material-ui/lab/Alert';
-
-Known Issues in $productName$
-=============================
+---
+title: Known Issues
+---
## 2.2.1
- TLS certificates using elliptic curves were incorrectly flagged as invalid. This issue is
- corrected in $productName$ 2.2.2.
+ corrected in Emissary 2.2.2.
diff --git a/content/en/docs/2.5/about/support.md b/content/en/docs/2.5/about/support.md
index 11927f95..85d9df15 100644
--- a/content/en/docs/2.5/about/support.md
+++ b/content/en/docs/2.5/about/support.md
@@ -1,22 +1,24 @@
-# Need help?
+---
+title: Support
+---
-If you need help deploying $productName$ at your organization, there are several different options available to you.
+If you need help deploying Emissary at your organization, there are several different options available to you.
## Support tiers
-### $productName$ community support
+### Emissary community support
-When running $OSSproductName$, or $AESproductName$ with free community licenses, [join our Slack channel](http://a8r.io/slack) to talk with other users in the community and get your questions answered.
+When running Emissary, or Ambassador Edge Stack with free community licenses, [join our Slack channel](http://a8r.io/slack) to talk with other users in the community and get your questions answered.
-If you can’t find an answer there, [contact us](/contact-us) to learn more about the support options available with $AESproductName$ Enterprise.
+If you can’t find an answer there, [contact us](/contact-us) to learn more about the support options available with Ambassador Edge Stack Enterprise.
-### $AESproductName$ Enterprise
+### Ambassador Edge Stack Enterprise
-With $AESproductName$ Enterprise, you have access to deployment and production support. To learn more, [contact sales](/contact-us).
+With Ambassador Edge Stack Enterprise, you have access to deployment and production support. To learn more, [contact sales](/contact-us).
-**Deployment and Update Support**: $AESproductName$ can accelerate your migration to Kubernetes, or your upgrade between versions of $AESproductName$. Deployment support helps you with the $AESproductName$ and Kubernetes migration, before you move to production.
+**Deployment and Update Support**: Ambassador Edge Stack can accelerate your migration to Kubernetes, or your upgrade between versions of Ambassador Edge Stack. Deployment support helps you with the Ambassador Edge Stack and Kubernetes migration, before you move to production.
-**Production Support**: We offer two types of production support contracts for users deploying the $AESproductName$ in production. We offer both business hour (8am - 5pm EST, M-F) and 24x7 Sev 1 support for the $AESproductName$. 24x7 Sev 1 support includes custom hotfix support for production outages if necessary.
+**Production Support**: We offer two types of production support contracts for users deploying the Ambassador Edge Stack in production. We offer both business hour (8am - 5pm EST, M-F) and 24x7 Sev 1 support for the Ambassador Edge Stack. 24x7 Sev 1 support includes custom hotfix support for production outages if necessary.
## File a Github Issue
diff --git a/content/en/docs/2.5/about/why-ambassador.md b/content/en/docs/2.5/about/why-ambassador.md
index 0d343983..d1b0d929 100644
--- a/content/en/docs/2.5/about/why-ambassador.md
+++ b/content/en/docs/2.5/about/why-ambassador.md
@@ -1,10 +1,12 @@
-# Why $productName$?
+---
+title: Why Emissary?
+---
-$productName$ gives platform engineers a comprehensive, self-service edge stack for managing the boundary between end-users and Kubernetes. Built on the [Envoy Proxy](https://www.envoyproxy.io) and fully Kubernetes-native, $productName$ is made to support multiple, independent teams that need to rapidly publish, monitor, and update services for end-users. A true edge stack, $productName$ can also be used to handle the functions of an API Gateway, a Kubernetes ingress controller, and a layer 7 load balancer (for more, see [this blog post](https://blog.getambassador.io/kubernetes-ingress-nodeport-load-balancers-and-ingress-controllers-6e29f1c44f2d)).
+Emissary gives platform engineers a comprehensive, self-service edge stack for managing the boundary between end-users and Kubernetes. Built on the [Envoy Proxy](https://www.envoyproxy.io) and fully Kubernetes-native, Emissary is made to support multiple, independent teams that need to rapidly publish, monitor, and update services for end-users. A true edge stack, Emissary can also be used to handle the functions of an API Gateway, a Kubernetes ingress controller, and a layer 7 load balancer (for more, see [this blog post](https://blog.getambassador.io/kubernetes-ingress-nodeport-load-balancers-and-ingress-controllers-6e29f1c44f2d)).
-## How Does $productName$ work?
+## How Does Emissary work?
-$productName$ is an open-source, Kubernetes-native [microservices API gateway](../../topics/concepts/microservices-api-gateways) built on the [Envoy Proxy](https://www.envoyproxy.io). $productName$ is built from the ground up to support multiple, independent teams that need to rapidly publish, monitor, and update services for end-users. $productName$ can also be used to handle the functions of a Kubernetes ingress controller and load balancer (for more, see [this blog post](https://blog.getambassador.io/kubernetes-ingress-nodeport-load-balancers-and-ingress-controllers-6e29f1c44f2d)).
+Emissary is an open-source, Kubernetes-native [microservices API gateway](../../topics/concepts/microservices-api-gateways) built on the [Envoy Proxy](https://www.envoyproxy.io). Emissary is built from the ground up to support multiple, independent teams that need to rapidly publish, monitor, and update services for end-users. Emissary can also be used to handle the functions of a Kubernetes ingress controller and load balancer (for more, see [this blog post](https://blog.getambassador.io/kubernetes-ingress-nodeport-load-balancers-and-ingress-controllers-6e29f1c44f2d)).
## Cloud-native applications today
@@ -16,15 +18,15 @@ Traditional cloud applications were built using a monolithic approach. These app
### Heterogeneous services
-$productName$ is commonly used to route traffic to a wide variety of services. It supports:
+Emissary is commonly used to route traffic to a wide variety of services. It supports:
* configuration on a *per-service* basis, enabling fine-grained control of timeouts, rate limiting, authentication policies, and more.
* a wide range of L7 protocols natively, including HTTP, HTTP/2, gRPC, gRPC-Web, and WebSockets.
-* Can route raw TCP for services that use protocols not directly supported by $productName$.
+* Can route raw TCP for services that use protocols not directly supported by Emissary.
### Dynamic services
-Service updates result in a constantly changing application. The dynamic nature of cloud-native applications introduces new challenges around configuration updates, release, and testing. $productName$:
+Service updates result in a constantly changing application. The dynamic nature of cloud-native applications introduces new challenges around configuration updates, release, and testing. Emissary:
* Enables [progressive delivery](../../topics/concepts/progressive-delivery), with support for canary routing and traffic shadowing.
* Exposes high-resolution observability metrics, providing insight into service behavior.
@@ -32,23 +34,23 @@ Service updates result in a constantly changing application. The dynamic nature
### Decentralized workflows
-Independent teams can create their own workflows for developing and releasing functionality that are optimized for their specific service(s). With $productName$, teams can:
+Independent teams can create their own workflows for developing and releasing functionality that are optimized for their specific service(s). With Emissary, teams can:
* Leverage a [declarative configuration model](../../topics/concepts/gitops-continuous-delivery), making it easy to understand the canonical configuration and implement GitOps-style best practices.
-* Independently configure different aspects of $productName$, eliminating the need to request configuration changes through a centralized operations team.
+* Independently configure different aspects of Emissary, eliminating the need to request configuration changes through a centralized operations team.
-## $productName$ is engineered for Kubernetes
+## Emissary is engineered for Kubernetes
-$productName$ takes full advantage of Kubernetes and Envoy Proxy.
+Emissary takes full advantage of Kubernetes and Envoy Proxy.
-* All of the state required for $productName$ is stored directly in Kubernetes, eliminating the need for an additional database.
-* The $productName$ team has added extensive engineering efforts and integration testing to ensure optimal performance and scale of Envoy and Kubernetes.
+* All of the state required for Emissary is stored directly in Kubernetes, eliminating the need for an additional database.
+* The Emissary team has added extensive engineering efforts and integration testing to ensure optimal performance and scale of Envoy and Kubernetes.
## For more information
-[Deploy $productName$ today](../../tutorials/getting-started) and join the community [Slack Channel](http://a8r.io/slack).
+[Deploy Emissary today](../../tutorials/getting-started) and join the community [Slack Channel](http://a8r.io/slack).
Interested in learning more?
-* [Why did we start building $productName$?](https://blog.getambassador.io/building-ambassador-an-open-source-api-gateway-on-kubernetes-and-envoy-ed01ed520844)
-* [$productName$ Architecture overview](../../topics/concepts/architecture)
+* [Why did we start building Emissary?](https://blog.getambassador.io/building-ambassador-an-open-source-api-gateway-on-kubernetes-and-envoy-ed01ed520844)
+* [Emissary Architecture overview](../../topics/concepts/architecture)
diff --git a/content/en/docs/2.5/community.md b/content/en/docs/2.5/community.md
index 759e4f0e..a2e08eb0 100644
--- a/content/en/docs/2.5/community.md
+++ b/content/en/docs/2.5/community.md
@@ -1,4 +1,7 @@
-# Community
+---
+title: Community
+weight: 50
+---
## Contributor's guide
Please review our [contributor's guide](https://github.com/emissary-ingress/emissary/blob/master/DEVELOPING.md)
diff --git a/content/en/docs/2.5/doc-links.yml b/content/en/docs/2.5/doc-links.yml
deleted file mode 100644
index 2fef59dc..00000000
--- a/content/en/docs/2.5/doc-links.yml
+++ /dev/null
@@ -1,228 +0,0 @@
- - title: Quick start
- link: /tutorials/getting-started
- - title: Install $productName$
- link: /topics/install/
- items:
- - title: Install with Helm
- link: /topics/install/helm
- - title: Install with Kubernetes YAML
- link: /topics/install/yaml-install
- - title: Try the demo with Docker
- link: /topics/install/docker
- - title: Upgrade or migrate to a newer version
- link: /topics/install/migration-matrix
- - title: Core concepts
- link: /topics/concepts/
- items:
- - title: Kubernetes network architecture
- link: /topics/concepts/kubernetes-network-architecture
- - title: "The Ambassador operating model: GitOps and continuous delivery"
- link: /topics/concepts/gitops-continuous-delivery
- - title: Progressive delivery
- link: /topics/concepts/progressive-delivery
- - title: Microservices API gateways
- link: /topics/concepts/microservices-api-gateways
- - title: $productName$ architecture
- link: /topics/concepts/architecture
- - title: Rate limiting at the edge
- link: /topics/concepts/rate-limiting-at-the-edge
- - title: How do I...
- items:
- - title: Route to my services
- items:
- - title: Configuring $productName$ Communications
- link: /howtos/configure-communications
- - title: Get traffic from the edge
- link: /howtos/route
- - title: Other protocols
- items:
- - title: TCP connections
- link: /topics/using/tcpmappings
- - title: gRPC connections
- link: /howtos/grpc
- - title: WebSocket connections
- link: /howtos/websockets
- - title: Protect my services
- items:
- - title: Authentication
- items:
- - title: Basic authentication with $productName$
- link: /howtos/basic-auth
- - title: Rate limiting
- items:
- - title: Basic rate limiting with $productName$
- link: /howtos/rate-limiting-tutorial
- - title: Monitor my services
- items:
- - title: Explore distributed tracing and Kubernetes monitoring
- link: /howtos/dist-tracing
- - title: Distributed tracing with Datadog
- link: /howtos/tracing-datadog
- - title: Distributed tracing with Zipkin
- link: /howtos/tracing-zipkin
- - title: Monitoring with Prometheus and Grafana
- link: /howtos/prometheus
- - title: Statistics
- link: /topics/running/statistics
- items:
- - title: Envoy statistics with StatsD
- link: /topics/running/statistics/envoy-statsd
- - title: The metrics endpoint
- link: /topics/running/statistics/8877-metrics
- - title: Set up integrations
- items:
- - title: Knative Serverless Framework
- link: /howtos/knative
- - title: ExternalDNS integration
- link: /howtos/external-dns
- - title: Service meshes
- items:
- - title: Consul integration
- link: /howtos/consul
- - title: Istio integration
- link: /howtos/istio
- - title: Linkerd 2 integration
- link: /howtos/linkerd2
- - title: Technical reference
- items:
- - title: Custom resources
- items:
- - title: The Host resource
- link: /topics/running/host-crd
- items:
- - title: TLS
- link: /topics/running/tls/
- items:
- - title: Cleartext support
- link: /topics/running/tls/cleartext-redirection
- - title: Mutual TLS (mTLS)
- link: /topics/running/tls/mtls
- - title: Server Name Indication (SNI)
- link: /topics/running/tls/sni
- - title: TLS origination
- link: /topics/running/tls/origination
- - title: The Listener resource
- link: /topics/running/listener
- - title: The Module resource
- link: /topics/running/ambassador
- - title: Deploying $productName$
- items:
- - title: Deployment architecture
- link: /topics/running/ambassador-deployment
- - title: $productName$ environment variables and ports
- link: /topics/running/environment
- - title: $productName$ with AWS
- link: /topics/running/ambassador-with-aws
- - title: $productName$ with GKE
- link: /topics/running/ambassador-with-gke
- - title: Advanced deployment configuration
- link: /topics/running/running
- - title: Performance and scaling $productName$
- link: /topics/running/scaling
- - title: Edge policy management
- items:
- - title: Gateway API
- link: /topics/using/gateway-api
- - title: Ingress and load balancing
- items:
- - title: The Mapping resource
- items:
- - title: Mapping basics
- link: /topics/using/intro-mappings
- - title: Advanced Mapping configuration
- link: /topics/using/mappings
- - title: AuthService settings
- link: /topics/using/authservice
- - title: Automatic retries
- link: /topics/using/retries
- - title: Canary releases
- link: /topics/using/canary
- - title: Circuit Breakers
- link: /topics/using/circuit-breakers
- - title: Cross-Origin Resource Sharing (CORS)
- link: /topics/using/cors
- - title: Headers
- link: /topics/using/headers/headers
- items:
- - title: Add request headers
- link: /topics/using/headers/add_request_headers
- - title: Remove request headers
- link: /topics/using/headers/remove_request_headers
- - title: Add response headers
- link: /topics/using/headers/add_response_headers
- - title: Remove response headers
- link: /topics/using/headers/remove_response_headers
- - title: Header-based routing
- link: /topics/using/headers/headers
- - title: Host header
- link: /topics/using/headers/host
- - title: Keepalive
- link: /topics/using/keepalive
- - title: Method-based routing
- link: /topics/using/method
- - title: Prefix regex
- link: /topics/using/prefix_regex
- - title: Query parameter-based routing
- link: /topics/using/query_parameters/
- - title: Redirects
- link: /topics/using/redirects
- - title: Rewrites
- link: /topics/using/rewrites
- - title: Timeouts
- link: /topics/using/timeouts
- - title: Traffic shadowing
- link: /topics/using/shadowing
- - title: Ingress controller
- link: /topics/running/ingress-controller
- - title: Load balancing
- link: /topics/running/load-balancer
- - title: Service discovery and resolvers
- link: /topics/running/resolvers
- - title: Plug-in services
- items:
- - title: Authentication service
- link: /topics/running/services/auth-service
- - title: ExtAuth protocol
- link: /topics/running/services/ext_authz
- - title: Log service
- link: /topics/running/services/log-service
- - title: Rate limit service
- link: /topics/running/services/rate-limit-service
- - title: Tracing service
- link: /topics/running/services/tracing-service
- - title: Traffic management
- items:
- - title: Custom error responses
- link: /topics/running/custom-error-responses
- - title: Gzip compression
- link: /topics/running/gzip
- - title: Rate limiting
- items:
- - title: Basic rate limiting
- link: /topics/using/rate-limits/
- - title: TLS
- items:
- - title: TLS termination and enabling HTTPS
- link: /howtos/tls-termination
- - title: Using cert-manager
- link: /howtos/cert-manager
- - title: Client certificate validation
- link: /howtos/client-cert-validation
- - title: End of Life Policy
- link: /about/aes-emissary-eol
- - title: Changes in $productName$ 2.X
- link: /about/changes-2.x
- - title: Known issues
- link: /about/known-issues
- - title: FAQs
- link: /about/faq
- - title: Community
- link: /community
- - title: Troubleshooting
- link: /topics/running/debugging
- - title: Release Notes
- link: /release-notes
- - title: Licenses
- link: licenses
- - title: EOL Policy
- link: /about/aes-emissary-eol
diff --git a/content/en/docs/2.5/howtos/_index.md b/content/en/docs/2.5/howtos/_index.md
new file mode 100644
index 00000000..b4fc2da6
--- /dev/null
+++ b/content/en/docs/2.5/howtos/_index.md
@@ -0,0 +1,28 @@
+---
+title: "How-to guides"
+weight: 20
+---
+
+These guides are designed to help users quickly accomplish common tasks. The guides assume a certain level of understanding of Emissary. Many of these guides are contributed by third parties; we welcome contributions via Pull Request at https://github.com/emissary-ingress/emissary.
+
+* Integrating with Service Mesh. Emissary natively integrates with many service meshes.
+ * [HashiCorp Consul](consul)
+ * [Istio](istio)
+ * [Linkerd](linkerd2)
+* Distributed tracing. Emissary natively supports a number of distributed tracing systems to enable developers to visualize request flow in microservice and service-oriented architectures.
+ * [Datadog](tracing-datadog)
+ * [Zipkin](tracing-zipkin)
+* Monitoring. Emissary integrates with a number of different monitoring/metrics providers.
+ * [Prometheus](prometheus)
+* [Developing Custom Filters](filter-dev-guide)
+* Frameworks and Protocols. Emissary supports a wide range of protocols and cloud-native frameworks.
+ * [gRPC](grpc)
+ * [Knative Serverless Framework](knative)
+ * [WebSockets](websockets)
+* Security. Emissary supports a number of strategies for securing Kubernetes services.
+ * [Protecting the Diagnostics Interface](protecting-diag-access)
+ * [HTTPS and TLS termination](tls-termination)
+ * [Certificate Manager](cert-manager) can be used to automatically obtain and renew TLS certificates; Ambassador Edge Stack natively integrates this functionality.
+ * [Client Certificate Validation](client-cert-validation)
+ * [Basic Authentication](basic-auth) is a tutorial on how to use the external authentication API to code your own authentication service.
+ * [Basic Rate Limiting](rate-limiting-tutorial)
diff --git a/content/en/docs/2.5/howtos/basic-auth.md b/content/en/docs/2.5/howtos/basic-auth.md
index 70ce27ce..c59cad2f 100644
--- a/content/en/docs/2.5/howtos/basic-auth.md
+++ b/content/en/docs/2.5/howtos/basic-auth.md
@@ -1,28 +1,22 @@
-import Alert from '@material-ui/lab/Alert';
-
-# Basic authentication (for $productName$)
-
-[//]: # (+FIX+ link to "authentication and authorization" concept)
-
-
- This guide applies to $OSSproductName$, use of this guide with $AESproductName$ is not supported. $AESproductName$ does authentication using the Filter resource instead of the AuthService resource as described below.
-
+---
+title: Basic Authentication
+---
-$productName$ can authenticate incoming requests before routing them to a backing
-service. In this tutorial, we'll configure $productName$ to use an external third
+Emissary can authenticate incoming requests before routing them to a backing
+service. In this tutorial, we'll configure Emissary to use an external third
party authentication service. We're assuming also that you are running the
quote application in your cluster as described in the
-[$productName$ tutorial](../../tutorials/quickstart-demo/).
+[Emissary tutorial](../../tutorials/quickstart-demo/).
## Before you get started
-This tutorial assumes you have already followed the $productName$ [Installation](../../topics/install/) guide. If you haven't done that already, you should do so now.
+This tutorial assumes you have already followed the Emissary [Installation](../../topics/install/) guide. If you haven't done that already, you should do so now.
-Once complete, you'll have a Kubernetes cluster running $productName$. Let's walk through adding authentication to this setup.
+Once complete, you'll have a Kubernetes cluster running Emissary. Let's walk through adding authentication to this setup.
## 1. Deploy the authentication service
-$productName$ delegates the actual authentication logic to a third party authentication service. We've written a [simple authentication service](https://github.com/datawire/ambassador-auth-service) that:
+Emissary delegates the actual authentication logic to a third party authentication service. We've written a [simple authentication service](https://github.com/datawire/ambassador-auth-service) that:
- listens for requests on port 3000;
- expects all URLs to begin with `/extauth/`;
@@ -30,7 +24,7 @@ $productName$ delegates the actual authentication logic to a third party authent
- accepts only user `username`, password `password`; and
- makes sure that the `x-qotm-session` header is present, generating a new one if needed.
-$productName$ routes _all_ requests through the authentication service: it relies on the auth service to distinguish between requests that need authentication and those that do not. If $productName$ cannot contact the auth service, it will return a 503 for the request; as such, **it is very important to have the auth service running before configuring $productName$ to use it.**
+Emissary routes _all_ requests through the authentication service: it relies on the auth service to distinguish between requests that need authentication and those that do not. If Emissary cannot contact the auth service, it will return a 503 for the request; as such, **it is very important to have the auth service running before configuring Emissary to use it.**
Here's the YAML we'll start with:
@@ -78,7 +72,7 @@ spec:
memory: 100Mi
```
-Note that the cluster does not yet contain any $productName$ AuthService definition. This is intentional: we want the service running before we tell $productName$ about it.
+Note that the cluster does not yet contain any Emissary AuthService definition. This is intentional: we want the service running before we tell Emissary about it.
The YAML above is published at getambassador.io, so if you like, you can just do
@@ -97,9 +91,9 @@ example-auth-6c5855b98d-24clp 1/1 Running 0 4m
```
Note that the `READY` field says `1/1` which means the pod is up and running.
-## 2. Configure $productName$ authentication
+## 2. Configure Emissary authentication
-Once the auth service is running, we need to tell $productName$ about it. The easiest way to do that is point it to the `example-auth` service with the following:
+Once the auth service is running, we need to tell Emissary about it. The easiest way to do that is point it to the `example-auth` service with the following:
```yaml
---
@@ -116,7 +110,7 @@ spec:
- "x-qotm-session"
```
-This configuration tells $productName$ about the auth service, notably that it needs the `/extauth` prefix, and that it's OK for it to pass back the `x-qotm-session` header. Note that `path_prefix` and `allowed_*_headers` are optional.
+This configuration tells Emissary about the auth service, notably that it needs the `/extauth` prefix, and that it's OK for it to pass back the `x-qotm-session` header. Note that `path_prefix` and `allowed_*_headers` are optional.
If the auth service uses a framework like [Gorilla Toolkit](http://www.gorillatoolkit.org) which enforces strict slashes as HTTP path separators, it is possible to end up with an infinite redirect where the auth service's framework redirects any request with non-conformant slashing. This would arise if the above example had `path_prefix: "/extauth/"`, the auth service would see a request for `/extauth//backend/get-quote/` which would then be redirected to `/extauth/backend/get-quote/` rather than actually be handled by the authentication handler. For this reason, remember that the full path of the incoming request including the leading slash, will be appended to `path_prefix` regardless of non-conformant slashing.
@@ -128,7 +122,7 @@ kubectl apply -f https://app.getambassador.io/yaml/v2-docs/$ossVersion$/demo/dem
or, again, apply it from a local file if you prefer.
-Note that the cluster does not yet contain any $productName$ AuthService definition.
+Note that the cluster does not yet contain any Emissary AuthService definition.
## 3. Test authentication
diff --git a/content/en/docs/2.5/howtos/cert-manager.md b/content/en/docs/2.5/howtos/cert-manager.md
index 975dd3ff..55f82717 100644
--- a/content/en/docs/2.5/howtos/cert-manager.md
+++ b/content/en/docs/2.5/howtos/cert-manager.md
@@ -1,11 +1,11 @@
-# Using cert-manager
+---
+title: Using cert-manager
+---
-[//]: # (+FIX+ link to "TLS and certificates" concept)
-
-$AESproductName$ has simple and easy built-in support for automatically [using ACME] with the
+Ambassador Edge Stack has simple and easy built-in support for automatically [using ACME] with the
`http-01` challenge to create and renew TLS certificates. However, this support is not available
-in $OSSproductName$, and it is limited to the ACME `http-01` challenge type. If you're running
-$OSSproductName$, or if you require more flexible certificate management (such as using ACME's
+in Emissary, and it is limited to the ACME `http-01` challenge type. If you're running
+Emissary, or if you require more flexible certificate management (such as using ACME's
`dns-01` challenge, or using a non-ACME certificate source), external certificate management
tools are also supported.
@@ -13,7 +13,7 @@ tools are also supported.
One such tool is Jetstack's [cert-manager](https://github.com/jetstack/cert-manager), which is a general-purpose tool
for managing certificates in Kubernetes. Cert-manager will automatically create and renew TLS certificates and store
-them as Kubernetes secrets for easy use in a cluster. $productName$ will automatically watch for secret
+them as Kubernetes secrets for easy use in a cluster. Emissary will automatically watch for secret
changes and reload certificates upon renewal.
> **Note:** This document assumes cert-manager v0.15 or greater. This document has been updated to use CRD standards
diff --git a/content/en/docs/2.5/howtos/client-cert-validation.md b/content/en/docs/2.5/howtos/client-cert-validation.md
index 10fe639d..7a2ec247 100644
--- a/content/en/docs/2.5/howtos/client-cert-validation.md
+++ b/content/en/docs/2.5/howtos/client-cert-validation.md
@@ -1,21 +1,21 @@
-# Client certificate validation
-
-[//]: # (+FIX+ link to "TLS and client certs" concept)
+---
+title: Client certificate validation
+---
Sometimes, for additional security or authentication purposes, you will want
the server to validate who the client is before establishing an encrypted
connection.
-To support this, $productName$ can be configured to use a provided CA certificate
+To support this, Emissary can be configured to use a provided CA certificate
to validate certificates sent from your clients. This allows for client-side
-mTLS where both $productName$ and the client provide and validate each other's
+mTLS where both Emissary and the client provide and validate each other's
certificates.
## Prerequisites
- [openssl](https://www.openssl.org/source/) For creating client certificates
- [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/)
-- [$productName$](../../tutorials/getting-started)
+- [Emissary](../../tutorials/getting-started)
- [cURL](https://curl.haxx.se/download.html)
@@ -30,7 +30,7 @@ certificates.
```
Enter a passcode for PEM files and fill in the certificate information.
- Since this certificate will only be shared between a client and $productName$,
+ Since this certificate will only be shared between a client and Emissary,
the Common Name must be set to something. Everything else can be left blank.
**Note:** If using MacOS,
@@ -55,7 +55,7 @@ certificates.
kubectl create secret generic client-cacert --from-file=tls.crt=cert.pem
```
-3. Configure $productName$ to use this certificate for client certificate validation.
+3. Configure Emissary to use this certificate for client certificate validation.
First create a `Host` to manage your domain:
@@ -84,14 +84,14 @@ certificates.
- host.example.com
secret: host.example.com
ca_secret: client-cacert
- cert_required: false # Optional: Configures $productName$ to reject the request if the client does not provide a certificate. Default: false
+ cert_required: false # Optional: Configures Emissary to reject the request if the client does not provide a certificate. Default: false
```
- **Note**: Client certificate validation requires $productName$ be configured to terminate TLS
+ **Note**: Client certificate validation requires Emissary be configured to terminate TLS
- $productName$ is now be configured to validate certificates that the client provides.
+ Emissary is now be configured to validate certificates that the client provides.
-4. Test that $productName$ is validating the client certificates with `curl`
+4. Test that Emissary is validating the client certificates with `curl`
**Linux**:
```
@@ -104,7 +104,7 @@ certificates.
```
Looking through the verbose output, you can see we are sending a client
- certificate and $productName$ is validating it.
+ certificate and Emissary is validating it.
If you need further proof, simply create a new set of certificates and
- try sending the curl with those. You will see $productName$ deny the request.
+ try sending the curl with those. You will see Emissary deny the request.
diff --git a/content/en/docs/2.5/howtos/configure-communications.md b/content/en/docs/2.5/howtos/configure-communications.md
index 1ac09d2c..eb6462f1 100644
--- a/content/en/docs/2.5/howtos/configure-communications.md
+++ b/content/en/docs/2.5/howtos/configure-communications.md
@@ -1,25 +1,24 @@
-import Alert from '@material-ui/lab/Alert';
-
-Configuring $productName$ Communications
-========================================
+---
+title: Configuring Emissary Communications
+---
-For $productName$ to do its job of managing network communications for your services, it first needs to know how its own communications should be set up. This is handled by a combination of resources: the `Listener`, the `Host`, and the `TLSContext`.
+For Emissary to do its job of managing network communications for your services, it first needs to know how its own communications should be set up. This is handled by a combination of resources: the `Listener`, the `Host`, and the `TLSContext`.
-- `Listener`: defines where, and how, $productName$ should listen for requests from the network.
-- `Host`: defines which hostnames $productName$ should care about, and how to handle different kinds of requests for those hosts. `Host`s can be associated with one or more `Listener`s.
-- `TLSContext`: defines whether, and how, $productName$ will manage TLS certificates and options. `TLSContext`s can be associated with one or more `Host`s.
+- `Listener`: defines where, and how, Emissary should listen for requests from the network.
+- `Host`: defines which hostnames Emissary should care about, and how to handle different kinds of requests for those hosts. `Host`s can be associated with one or more `Listener`s.
+- `TLSContext`: defines whether, and how, Emissary will manage TLS certificates and options. `TLSContext`s can be associated with one or more `Host`s.
-Once the basic communications setup is in place, $productName$ `Mapping`s and `TCPMapping`s can be associated with `Host`s to actually do routing.
+Once the basic communications setup is in place, Emissary `Mapping`s and `TCPMapping`s can be associated with `Host`s to actually do routing.
Remember that Listener
and Host
resources are
- required for a functioning $productName$ installation that can route traffic!
+ required for a functioning Emissary installation that can route traffic!
Learn more about Listener
.
Learn more about Host
.
- Remember than $productName$ does not make sure that a wildcard Host
exists! If the
+ Remember than Emissary does not make sure that a wildcard Host
exists! If the
wildcard behavior is needed, a Host
with a hostname
of "*"
must be defined by the user.
@@ -38,7 +37,7 @@ A Note on TLS
-------------
[TLS] can appear intractable if you haven't set up [certificates] correctly. If you're
-having trouble with TLS, always [check the logs] of your $productName$ Pods and look for
+having trouble with TLS, always [check the logs] of your Emissary Pods and look for
certificate errors.
[TLS]: ../../topics/running/tls
@@ -51,7 +50,7 @@ Examples / Cookbook
### Basic HTTP and HTTPS
A useful configuration is to support either HTTP or HTTPS, in this case on either port 8080 or port 8443. This
-tends to make it as easy as possible to communicate with the services behind the $productName$ instance. It uses
+tends to make it as easy as possible to communicate with the services behind the Emissary instance. It uses
two `Listener`s and at least one `Host`.
@@ -172,13 +171,13 @@ spec:
Learn more about Host
-### TLS using ACME ($AESproductName$ only)
+### TLS using ACME (Ambassador Edge Stack only)
This scenario uses ACME to get certificates for `foo.example.com` and `bar.example.com`. HTTPS traffic to either
host is routed; HTTP traffic to `foo.example.com` will be redirected to HTTPS, but HTTP traffic to `bar.example.com`
will be rejected outright.
-Since this example uses ACME, **it is only supported in $AESproductName$**.
+Since this example uses ACME, **it is only supported in Ambassador Edge Stack**.
For demonstration purposes, we show this example listening for HTTPS on port 9999, using `X-Forwarded-Proto`.
@@ -240,7 +239,7 @@ This scenario uses TLS without ACME. Each of our two `Host`s uses a distinct TLS
traffic to either`foo.example.com` or `bar.example.com` is routed, but this time `foo.example.com` will redirect
HTTP requests, while `bar.example.com` will route them.
-Since this example does not use ACME, it is supported in $productName$ as well as $AESproductName$.
+Since this example does not use ACME, it is supported in Emissary as well as Ambassador Edge Stack.
For demonstration purposes, we show this example listening for HTTPS on port 4848, using `X-Forwarded-Proto`.
@@ -381,10 +380,10 @@ spec:
Learn more about Host
-### ACME With a TLSContext ($AESproductName$ Only)
+### ACME With a TLSContext (Ambassador Edge Stack Only)
-In $AESproductName$, you can use a `TLSContext` with ACME as well. This example is the same as "TLS using ACME",
-but we use a `TLSContext` to set `ALPN` information. Again, ACME is only supported in $AESproductName$.
+In Ambassador Edge Stack, you can use a `TLSContext` with ACME as well. This example is the same as "TLS using ACME",
+but we use a `TLSContext` to set `ALPN` information. Again, ACME is only supported in Ambassador Edge Stack.
```yaml
---
@@ -420,7 +419,7 @@ spec:
### Using an L7 Load Balancer to Terminate TLS
-In this scenario, a layer 7 load balancer ahead of $productName$ will terminate TLS, so $productName$ will always see HTTP with a known good `X-Forwarded-Protocol`. We'll use that to route HTTPS and redirect HTTP.
+In this scenario, a layer 7 load balancer ahead of Emissary will terminate TLS, so Emissary will always see HTTP with a known good `X-Forwarded-Protocol`. We'll use that to route HTTPS and redirect HTTP.
```yaml
---
@@ -450,7 +449,7 @@ spec:
- We set `l7Depth` to 1 to indicate that there's a single trusted L7 load balancer ahead of us.
- We specifically set this Listener to HTTP-only, but we stick with port 8443 just because we expect people setting up TLS at all to expect to use port 8443. (There's nothing special about the port number, pick whatever you like.)
-- Our `Host` does not specify a `tlsSecret`, so $productName$ will not try to terminate TLS.
+- Our `Host` does not specify a `tlsSecret`, so Emissary will not try to terminate TLS.
- Since the `Listener` still pays attention to `X-Forwarded-Proto`, both secure and insecure requests
are possible, and we use the `Host` to route HTTPS and redirect HTTP.
@@ -462,12 +461,12 @@ spec:
### Using a Split L4 Load Balancer to Terminate TLS
-Here, we assume that $productName$ is behind a load balancer setup that handles TLS at layer 4:
+Here, we assume that Emissary is behind a load balancer setup that handles TLS at layer 4:
-- Incoming cleartext traffic is forwarded to $productName$ on port 8080.
-- Incoming TLS traffic is terminated at the load balancer, then forwarded to $productName$ _as cleartext_ on port 8443.
+- Incoming cleartext traffic is forwarded to Emissary on port 8080.
+- Incoming TLS traffic is terminated at the load balancer, then forwarded to Emissary _as cleartext_ on port 8443.
- This might involve multiple L4 load balancers, but the actual number doesn't matter.
-- The actual port numbers we use don't matter either, as long as $productName$ and the load balancer(s) agree on which port is for which traffic.
+- The actual port numbers we use don't matter either, as long as Emissary and the load balancer(s) agree on which port is for which traffic.
We're going to route HTTPS for both `foo.example.com` and `bar.example.com`, redirect HTTP for `foo.example.com`, and reject HTTP for `bar.example.com`.
diff --git a/content/en/docs/2.5/howtos/consul.md b/content/en/docs/2.5/howtos/consul.md
index a8c7404e..77cc6247 100644
--- a/content/en/docs/2.5/howtos/consul.md
+++ b/content/en/docs/2.5/howtos/consul.md
@@ -1,7 +1,6 @@
-
-import Alert from '@material-ui/lab/Alert';
-
-# Consul integration
+---
+title: Consul integration
+---
Contents
@@ -9,7 +8,7 @@ import Alert from '@material-ui/lab/Alert';
- [Consul integration](#consul-integration)
- [Architecture overview](#architecture-overview)
- [Installing Consul](#installing-consul)
- - [Installing $productName$](#installing-consul)
+ - [Installing Emissary](#installing-consul)
- [Using Consul for service discovery](#using-consul-for-service-discovery)
- [Using Consul for authorization and encryption](#using-consul-for-authorization-and-encryption)
- [Environment variables](#environment-variables)
@@ -18,32 +17,32 @@ import Alert from '@material-ui/lab/Alert';
[Consul](https://www.consul.io) is a widely used service mesh.
-$productName$ natively supports service discovery and unauthenticated
+Emissary natively supports service discovery and unauthenticated
communication to services in Consul. Additionally, the *Ambassador
-Consul Connector* enables $productName$ to encrypt and authenticate
+Consul Connector* enables Emissary to encrypt and authenticate
its communication via mTLS with services in Consul that make use of
[Consul's *Connect* feature](https://www.consul.io/docs/connect).
## Architecture overview
-Using Consul with $productName$ is particularly useful when deploying
-$productName$ in hybrid cloud environments where you deploy
+Using Consul with Emissary is particularly useful when deploying
+Emissary in hybrid cloud environments where you deploy
applications on VMs and Kubernetes. In this environment, Consul
-enables $productName$ to securely route over TLS to any application
+enables Emissary to securely route over TLS to any application
regardless of where it is deployed.
In this architecture, Consul serves as the source of truth for your
entire data center, tracking available endpoints, service
configuration, and secrets for TLS encryption. New applications and
services automatically register themselves with Consul using the
-Consul agent or API. When you send a request through $productName$,
-$productName$ sends the request to an endpoint based on the data in
+Consul agent or API. When you send a request through Emissary,
+Emissary sends the request to an endpoint based on the data in
Consul.
![ambassador-consul](../../images/consul-ambassador.png)
This guide first instructs you on registering a service with Consul
-and using $productName$ to dynamically route requests to that service
+and using Emissary to dynamically route requests to that service
based on Consul's service discovery data, and subsequently instructs
you on using using the Ambassador Consul Connector to use Consul for
authorizing and encrypting requests.
@@ -121,24 +120,24 @@ and skip to the next section.
helm install -f consul-values.yaml hashicorp hashicorp/consul
```
-## Installing $productName$
+## Installing Emissary
-If you have not already installed $productName$ in to your cluster,
+If you have not already installed Emissary in to your cluster,
then go to the [quick start guide](../../tutorials/getting-started)
before continuing any further in this guide.
## Using Consul for service discovery
-This section of the guide instructs you on configuring $productName$
+This section of the guide instructs you on configuring Emissary
to look for services registered to Consul, registering a demo
-application with Consul, and configuring $productName$ to route to
+application with Consul, and configuring Emissary to route to
this application using endpoint data from Consul.
In this tutorial, you deploy the application in Kubernetes. However,
this application can be deployed anywhere in your data center, such as
on a VM.
-1. Configure $productName$ to look for services registered to Consul
+1. Configure Emissary to look for services registered to Consul
by creating the `ConsulResolver`. Use `kubectl` to apply the
following manifest:
@@ -172,10 +171,10 @@ on a VM.
- This tells $productName$ that Consul is a service discovery endpoint.
+ This tells Emissary that Consul is a service discovery endpoint.
You must set the resolver to your `ConsulResolver` on a
- per-`Mapping` basis, otherwise for that `Mapping` $productName$
+ per-`Mapping` basis, otherwise for that `Mapping` Emissary
uses the default resolver. That is, in order for a `Mapping` to
make use of a service registered in Consul, you need to add
`resolver: consul-dc1` to that `Mapping`.
@@ -296,7 +295,7 @@ on a VM.
-4. Configure $productName$ to make use of this `quote-consul` service.
+4. Configure Emissary to make use of this `quote-consul` service.
Use `kubectl` to apply the following manifest:
```shell
@@ -322,12 +321,12 @@ on a VM.
`Deployment`.
- `resolver` must be set to the `ConsulResolver` that you created in
the previous step.
- - `load_balancer` must be set to configure $productName$ to route
+ - `load_balancer` must be set to configure Emissary to route
directly to the Quote application endpoints that
are retrieved from Consul.
5. Send a request to the `/quote-consul/` API endpoint in order to
- validate that $productName$ is now making use of that service:
+ validate that Emissary is now making use of that service:
```console
$ AMBASSADOR_IP=$(kubectl --namespace $productNamespace$ get services/$productDeploymentName$ -o "go-template={{range .status.loadBalancer.ingress}}{{or .ip .hostname}}{{end}}")
@@ -352,14 +351,14 @@ Consul.
In this part of the guide, you'll install a different version of the
demo application that now uses Consul's *Connect* feature to authorize
its incoming connections using mTLS, and install *Ambassador Consul
-Connector* to enable $productName$ to authenticate to such services.
+Connector* to enable Emissary to authenticate to such services.
The following steps assume you've already set up Consul for service
discovery, as detailed above.
1. The Ambassador Consul Connector retrieves the TLS certificate
issued by the Consul CA and stores it in a Kubernetes `Secret` for
- $productName$ to use. Deploy the Ambassador Consul Connector with
+ Emissary to use. Deploy the Ambassador Consul Connector with
`kubectl`:
```shell
@@ -371,7 +370,7 @@ discovery, as detailed above.
- RBAC resources.
- The Ambassador Consul Connector service.
- A `TLSContext` named `ambassador-consul` to load the
- `ambassador-consul-connect` `Secret` into $productName$.
+ `ambassador-consul-connect` `Secret` into Emissary.
2. Deploy a new version of the demo application, and configure it to
inject the Consul Connect sidecar by setting
@@ -487,7 +486,7 @@ discovery, as detailed above.
After you have verified that you see the `quote-connect` service in
your web browser, you may kill the port-forward.
-5. Create a `Mapping` to configure $productName$ route to the
+5. Create a `Mapping` to configure Emissary route to the
`quote-connect` service in Consul. Use `kubectl` to apply the
following manifest:
@@ -515,11 +514,11 @@ discovery, as detailed above.
You can view this with `kubectl get svc -A` it should follow the
format of `{service name}-sidecar-proxy`.
- `resolver` must be set to the `ConsulResolver` created when
- configuring $productName$.
+ configuring Emissary.
- `tls` must be set to the TLSContext storing the Consul mTLS
certificates, which is `ambassador-consul` in the standard
`ambassador-consul-connector.yaml`.
- - `load_balancer` must be set to configure $productName$ to route
+ - `load_balancer` must be set to configure Emissary to route
directly to the application endpoints that are retrieved from
Consul.
@@ -527,7 +526,7 @@ discovery, as detailed above.
the `quote-connect` service in Consul.
6. Send a request to the `/quote-connect/` API endpoint in order to
- validate that $productName$ is now using mTLS to encrypt and
+ validate that Emissary is now using mTLS to encrypt and
authenticate communication with that service:
```console
@@ -554,7 +553,7 @@ environment variables. The defaults are best for most use-cases.
| Environment Variable | Description | Default |
|------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------|
-| `_AMBASSADOR_ID` | Set the Ambassador ID so multiple instances of this integration can run per-Cluster when there are multiple $productNamePlural$ (Required if `AMBASSADOR_ID` is set in your $productName$ `Deployment`) | `""` |
+| `_AMBASSADOR_ID` | Set the Ambassador ID so multiple instances of this integration can run per-Cluster when there are multiple $productNamePlural$ (Required if `AMBASSADOR_ID` is set in your Emissary `Deployment`) | `""` |
| `_CONSUL_HOST` | Set the IP or DNS name of the target Consul HTTP API server | `127.0.0.1` |
| `_CONSUL_PORT` | Set the port number of the target Consul HTTP API server | `8500` |
| `_AMBASSADOR_TLS_SECRET_NAME` | Set the name of the Kubernetes `v1.Secret` created by this program that contains the Consul-generated TLS certificate. | `$AMBASSADOR_ID-consul-connect` |
@@ -562,6 +561,6 @@ environment variables. The defaults are best for most use-cases.
## More information
-For more about $productName$'s integration with Consul, read the
+For more about Emissary's integration with Consul, read the
[service discovery configuration](../../topics/running/resolvers)
documentation.
diff --git a/content/en/docs/2.5/howtos/dist-tracing.md b/content/en/docs/2.5/howtos/dist-tracing.md
index ec5b160f..5d48ef27 100644
--- a/content/en/docs/2.5/howtos/dist-tracing.md
+++ b/content/en/docs/2.5/howtos/dist-tracing.md
@@ -1,4 +1,6 @@
-# Explore distributed tracing and Kubernetes monitoring
+---
+title: Distributed Tracing
+---
The Kubernetes monitoring and distributed tracing landscape is hard to grasp. Although this conceptual approach to [observability is nothing new](https://blog.getambassador.io/distributed-tracing-with-java-microdonuts-kubernetes-and-the-ambassador-api-gateway-ace15b62a89e) — companies like New Relic revolutionized single-application performance monitoring (APM) over a decade ago — it took a few years and the [Dapper publication](https://research.google/pubs/pub36356/) for this idea to migrate to distributed applications. The importance of this technology is only increasing, as more and more of us are building [“deep systems”](https://lightstep.com/deep-systems/).
diff --git a/content/en/docs/2.5/howtos/external-dns.md b/content/en/docs/2.5/howtos/external-dns.md
index f0f51dbb..2a771dd9 100644
--- a/content/en/docs/2.5/howtos/external-dns.md
+++ b/content/en/docs/2.5/howtos/external-dns.md
@@ -1,6 +1,6 @@
-import Alert from '@material-ui/lab/Alert';
-
-# ExternalDNS with $productName$
+---
+title: ExternalDNS
+---
[ExternalDNS](https://github.com/kubernetes-sigs/external-dns) configures your existing DNS provider to make Kubernetes resources discoverable via public DNS servers by getting resources from the Kubernetes API to create a list of DNS records.
@@ -14,9 +14,9 @@ Start by checking the [ExternalDNS repo's deployment instructions](https://githu
### Installation
-Configuration for a `ServiceAccount`, `ClusterRole`, and `ClusterRoleBinding` are necessary for the ExternalDNS deployment to support compatability with $productName$ and allow ExternalDNS to get hostnames from $productName$'s `Hosts`.
+Configuration for a `ServiceAccount`, `ClusterRole`, and `ClusterRoleBinding` are necessary for the ExternalDNS deployment to support compatability with Emissary and allow ExternalDNS to get hostnames from Emissary's `Hosts`.
-The following configuration is an example configuring $productName$ - ExternalDNS integration with [AWS Route53](https://aws.amazon.com/route53/) as the DNS provider. Refer to the ExternalDNS documentation above for annotations and arguments for your DNS Provider.
+The following configuration is an example configuring Emissary - ExternalDNS integration with [AWS Route53](https://aws.amazon.com/route53/) as the DNS provider. Refer to the ExternalDNS documentation above for annotations and arguments for your DNS Provider.
1. Create a YAML file named `externaldns-config.yaml`, and copy the following configuration into it.
@@ -97,9 +97,9 @@ The following configuration is an example configuring $productName$ - ExternalDN
Configure or remove arguments to fit your needs. Additional arguments required for your DNS provider can be found by checking the [ExternalDNS repo's deployment instructions](https://github.com/kubernetes-sigs/external-dns#deploying-to-a-cluster).
- * `--source=ambassador-host` - required across all DNS providers to tell ExternalDNS to look for hostnames in the $productName$ `Host` configurations.
+ * `--source=ambassador-host` - required across all DNS providers to tell ExternalDNS to look for hostnames in the Emissary `Host` configurations.
-3. Apply the above config with the following command to deploy ExternalDNS to your cluster and configure support for $productName$
+3. Apply the above config with the following command to deploy ExternalDNS to your cluster and configure support for Emissary
```shell
kubectl apply -f externaldns-ambassador.yaml
@@ -111,7 +111,7 @@ The following configuration is an example configuring $productName$ - ExternalDN
## Usage
-After applying the above configuration, ExternalDNS is ready to use. Configure a `Host` with the following annotation to allow ExternalDNS to get the IP address of your $productName$'s LoadBalancer and register it with your DNS provider.
+After applying the above configuration, ExternalDNS is ready to use. Configure a `Host` with the following annotation to allow ExternalDNS to get the IP address of your Emissary's LoadBalancer and register it with your DNS provider.
```yaml
apiVersion: getambassador.io/v3alpha1
@@ -127,4 +127,4 @@ spec:
```
-Victory! ExternalDNS is now running and configured to report $productName$'s IP and hostname with your DNS provider.
+Victory! ExternalDNS is now running and configured to report Emissary's IP and hostname with your DNS provider.
diff --git a/content/en/docs/2.5/howtos/filter-dev-guide.md b/content/en/docs/2.5/howtos/filter-dev-guide.md
index eefe8b6b..d0413fd6 100644
--- a/content/en/docs/2.5/howtos/filter-dev-guide.md
+++ b/content/en/docs/2.5/howtos/filter-dev-guide.md
@@ -1,18 +1,20 @@
-# Developing custom filters for routing
+---
+title: Developing custom filters for routing
+---
-Sometimes you may want $AESproductName$ to manipulate an incoming request. Some example use cases:
+Sometimes you may want Ambassador Edge Stack to manipulate an incoming request. Some example use cases:
* Inspect an incoming request, and add a custom header that can then be used for routing
* Add custom Authorization headers
* Validate an incoming request fits an OpenAPI specification before passing the request to a target service
-$AESproductName$ supports these use cases by allowing you to execute custom logic in `Filters`. Filters are written in Golang, and managed by $AESproductName$. If you want to write a filter in a language other than Golang, $AESproductName$ also has an HTTP/gRPC interface for Filters called `External`.
+Ambassador Edge Stack supports these use cases by allowing you to execute custom logic in `Filters`. Filters are written in Golang, and managed by Ambassador Edge Stack. If you want to write a filter in a language other than Golang, Ambassador Edge Stack also has an HTTP/gRPC interface for Filters called `External`.
## Prerequisites
-`Plugin` `Filter`s are built as [Go plugins](https://golang.org/pkg/plugin/) and loaded directly into the $AESproductName$ container so they can run in-process with the rest of $AESproductName$.
+`Plugin` `Filter`s are built as [Go plugins](https://golang.org/pkg/plugin/) and loaded directly into the Ambassador Edge Stack container so they can run in-process with the rest of Ambassador Edge Stack.
-To build a `Plugin` `Filter` into the $AESproductName$ container you will need
+To build a `Plugin` `Filter` into the Ambassador Edge Stack container you will need
- Linux or MacOS host (Windows Subsystem for Linux is ok)
- [Docker](https://docs.docker.com/install/)
- [rsync](https://rsync.samba.org/)
@@ -36,10 +38,10 @@ We've created an example filter that you can customize for your particular use c
4. Push the image to your Docker registry: `docker push $DOCKER_REGISTRY/amb-sidecar-plugin:VERSION`.
-5. Configure $AESproductName$ to use the plugin by creating a `Filter`
+5. Configure Ambassador Edge Stack to use the plugin by creating a `Filter`
and `FilterPolicy` CRD, as per the [filter reference](/docs/edge-stack/latest/topics/using/filters/).
-6. Update the standard $AESproductName$ manifest to use your Docker
+6. Update the standard Ambassador Edge Stack manifest to use your Docker
image instead of the standard sidecar.
```patch
@@ -55,14 +57,14 @@ We've created an example filter that you can customize for your particular use c
## Rapid development of a custom filter
-During development, you may want to sidestep the deployment process for a faster development loop. The `aes-plugin-runner` helps you rapidly develop $AESproductName$ filters locally.
+During development, you may want to sidestep the deployment process for a faster development loop. The `aes-plugin-runner` helps you rapidly develop Ambassador Edge Stack filters locally.
To install the runner, download the latest version:
Mac 64-bit |
Linux 64-bit
-Note that the plugin runner must match the version of $AESproductName$ that you are running. Place the binary somewhere in your `$PATH`.
+Note that the plugin runner must match the version of Ambassador Edge Stack that you are running. Place the binary somewhere in your `$PATH`.
Information about open-source code used in `aes-plugin-runner` can be found by running `aes-plugin-runner --version`.
diff --git a/content/en/docs/2.5/howtos/grpc.md b/content/en/docs/2.5/howtos/grpc.md
index 3967ddf7..ffdc0872 100644
--- a/content/en/docs/2.5/howtos/grpc.md
+++ b/content/en/docs/2.5/howtos/grpc.md
@@ -1,12 +1,14 @@
-# gRPC Connections
+---
+title: gRPC
+---
-$productName$ makes it easy to access your services from outside your application. This includes gRPC services, although a little bit of additional configuration is required: by default, Envoy connects to upstream services using HTTP/1.x and then upgrades to HTTP/2 whenever possible. However, gRPC is built on HTTP/2 and most gRPC servers do not speak HTTP/1.x at all. $productName$ must tell its underlying Envoy that your gRPC service only wants to speak to that HTTP/2, using the `grpc` attribute of a `Mapping`.
+Emissary makes it easy to access your services from outside your application. This includes gRPC services, although a little bit of additional configuration is required: by default, Envoy connects to upstream services using HTTP/1.x and then upgrades to HTTP/2 whenever possible. However, gRPC is built on HTTP/2 and most gRPC servers do not speak HTTP/1.x at all. Emissary must tell its underlying Envoy that your gRPC service only wants to speak to that HTTP/2, using the `grpc` attribute of a `Mapping`.
-## Writing a gRPC service for $productName$
+## Writing a gRPC service for Emissary
There are many examples and walkthroughs on how to write gRPC applications so that is not what this article will aim to accomplish. If you do not yet have a service written you can find examples of gRPC services in all supported languages here: [gRPC Quickstart](https://grpc.io/docs/quickstart/)
-This document will use the [gRPC python helloworld example](https://github.com/grpc/grpc/tree/master/examples/python/helloworld) to demonstrate how to configure a gRPC service with $productName$.
+This document will use the [gRPC python helloworld example](https://github.com/grpc/grpc/tree/master/examples/python/helloworld) to demonstrate how to configure a gRPC service with Emissary.
Follow the example up through [Run a gRPC application](https://grpc.io/docs/languages/python/quickstart/#run-a-grpc-application) to get started.
@@ -61,7 +63,7 @@ $ docker push /grpc_example
### Mapping gRPC services
-$productName$ `Mapping`s are based on URL prefixes; for gRPC, the URL prefix is the full-service name, including the package path (`package.service`). These are defined in the `.proto` definition file. In the example [proto definition file](https://github.com/grpc/grpc/blob/master/examples/protos/helloworld.proto) we see:
+Emissary `Mapping`s are based on URL prefixes; for gRPC, the URL prefix is the full-service name, including the package path (`package.service`). These are defined in the `.proto` definition file. In the example [proto definition file](https://github.com/grpc/grpc/blob/master/examples/protos/helloworld.proto) we see:
```
package helloworld;
@@ -155,7 +157,7 @@ spec:
restartPolicy: Always
```
-The Host is declared here because we are using gRPC without TLS. Since $productName$ terminates TLS by default, in the Host we add a `requestPolicy` which allows insecure connections. After adding the $productName$ mapping to the service, the rest of the Kubernetes deployment YAML file is pretty straightforward. We need to identify the container image to use, expose the `containerPort` to listen on the same port the Docker container is listening on, and map the service port (80) to the container port (50051).
+The Host is declared here because we are using gRPC without TLS. Since Emissary terminates TLS by default, in the Host we add a `requestPolicy` which allows insecure connections. After adding the Emissary mapping to the service, the rest of the Kubernetes deployment YAML file is pretty straightforward. We need to identify the container image to use, expose the `containerPort` to listen on the same port the Docker container is listening on, and map the service port (80) to the container port (50051).
> For more information on insecure routing, please refer to the [`Host` documentation](../../topics/running/host-crd#secure-and-insecure-requests).
@@ -168,7 +170,7 @@ $ kubectl apply -f grpc_example.yaml
### Testing the Deployment
-Make sure to test your Kubernetes deployment before making more advanced changes (like adding TLS). To test any service with $productName$, we will need the hostname of the running $productName$ service which you can get with:
+Make sure to test your Kubernetes deployment before making more advanced changes (like adding TLS). To test any service with Emissary, we will need the hostname of the running Emissary service which you can get with:
```
$ kubectl get service ambassador -o wide
@@ -200,11 +202,11 @@ Greeter client received: Hello, you!
### gRPC and TLS
-There is some extra configuration required to connect to a gRPC service through $productName$ over an encrypted channel. Currently, the gRPC call is being sent over cleartext to $productName$ which proxies it to the gRPC application.
+There is some extra configuration required to connect to a gRPC service through Emissary over an encrypted channel. Currently, the gRPC call is being sent over cleartext to Emissary which proxies it to the gRPC application.
![](../images/grpc-tls.png)
-If you want to add TLS encryption to your gRPC calls, first you need to tell $productName$ to add [ALPN protocols](../../topics/running/tls) which are required by HTTP/2 to do TLS.
+If you want to add TLS encryption to your gRPC calls, first you need to tell Emissary to add [ALPN protocols](../../topics/running/tls) which are required by HTTP/2 to do TLS.
For example:
@@ -221,7 +223,7 @@ spec:
alpn_protocols: h2
```
-Next, you need to change the client code slightly and tell it to open a secure RPC channel with $productName$.
+Next, you need to change the client code slightly and tell it to open a secure RPC channel with Emissary.
```diff
- with grpc.insecure_channel(‘$AMBASSADORHOST:$PORT’) as channel:
@@ -231,9 +233,9 @@ Next, you need to change the client code slightly and tell it to open a secure R
print("Greeter client received: " + response.message)
```
-`grpc.ssl_channel_credentials(root_certificates=None, private_key=None, certificate_chain=None)`returns the root certificate that will be used to validate the certificate and public key sent by $productName$. The default values of `None` tells the gRPC runtime to grab the root certificate from the default location packaged with gRPC and ignore the private key and certificate chain fields. Generally, passing no arguments to the method that requests credentials gives the same behavior. Refer to the languages [API Reference](https://grpc.io/docs/) if this is not the case.
+`grpc.ssl_channel_credentials(root_certificates=None, private_key=None, certificate_chain=None)`returns the root certificate that will be used to validate the certificate and public key sent by Emissary. The default values of `None` tells the gRPC runtime to grab the root certificate from the default location packaged with gRPC and ignore the private key and certificate chain fields. Generally, passing no arguments to the method that requests credentials gives the same behavior. Refer to the languages [API Reference](https://grpc.io/docs/) if this is not the case.
-$productName$ is now terminating TLS from the gRPC client and proxying the call to the application over cleartext.
+Emissary is now terminating TLS from the gRPC client and proxying the call to the application over cleartext.
![](../images/gRPC-TLS-Ambassador.png)
@@ -243,7 +245,7 @@ If you want to configure authentication in another language, [gRPC provides exam
Some gRPC clients automatically include the port in the Host header. This is a problem when using TLS because the certificate will match `myurl.com` but the Host header will be `myurl.com:443`, resulting in the error `rpc error: code = Unimplemented desc =`. If you run into this issue, there are two ways to solve it depending on your use case, both using the Module resource.
-The first is to set the `strip_matching_host_port` [property](../../topics/running/ambassador#strip-matching-host-port) to `true`. However, this only works if the port in the header matches the port that Envoy listens on (8443 by default). In the default installation of $productName$, the public port is 443, which then maps internally to 8443, so this only works for custom installations where the public service port matches the port in the Listener resource.
+The first is to set the `strip_matching_host_port` [property](../../topics/running/ambassador#strip-matching-host-port) to `true`. However, this only works if the port in the header matches the port that Envoy listens on (8443 by default). In the default installation of Emissary, the public port is 443, which then maps internally to 8443, so this only works for custom installations where the public service port matches the port in the Listener resource.
The second solution is to use the following [Lua script](../../topics/running/ambassador#lua-scripts), which always strips the port:
@@ -272,7 +274,7 @@ spec:
![](../images/gRPC-TLS-Originate.png)
-$productName$ can originate TLS with your gRPC service so the entire RPC channel is encrypted. To configure this, first get some TLS certificates and configure the server to open a secure channel with them. Using self-signed certs this can be done with OpenSSL and adding a couple of lines to the server code.
+Emissary can originate TLS with your gRPC service so the entire RPC channel is encrypted. To configure this, first get some TLS certificates and configure the server to open a secure channel with them. Using self-signed certs this can be done with OpenSSL and adding a couple of lines to the server code.
```diff
def serve():
@@ -298,7 +300,7 @@ Rebuild your docker container **making sure the certificates are included** and
print("Greeter client received: " + response.message)
```
-Once deployed we will need to tell $productName$ to originate TLS to the application.
+Once deployed we will need to tell Emissary to originate TLS to the application.
```yaml
---
@@ -342,7 +344,7 @@ spec:
secret: ambassador-cert
```
-We need to tell $productName$ to route to the `service:` over https and have the service listen on `443`. We also need to tell $productName$ to use ALPN protocols when originating TLS with the application, the same way we did with TLS termination. This is done by setting `alpn_protocols: ["h2"]` in a `TLSContext` telling the service to use that tls-context in the mapping by setting `tls: upstream`.
+We need to tell Emissary to route to the `service:` over https and have the service listen on `443`. We also need to tell Emissary to use ALPN protocols when originating TLS with the application, the same way we did with TLS termination. This is done by setting `alpn_protocols: ["h2"]` in a `TLSContext` telling the service to use that tls-context in the mapping by setting `tls: upstream`.
Refer to the [TLS document](../../topics/running/tls/origination#advanced-configuration-using-a-tlscontext) for more information on TLS origination.
@@ -359,9 +361,9 @@ headers:
### Ingress controllers
-Some [Kubernetes ingress controllers](https://kubernetes.io/docs/concepts/services-networking/ingress/) do not support HTTP/2 fully. As a result, if you are running $productName$ with an ingress controller in front, you may find that gRPC requests fail even with correct $productName$ configuration.
+Some [Kubernetes ingress controllers](https://kubernetes.io/docs/concepts/services-networking/ingress/) do not support HTTP/2 fully. As a result, if you are running Emissary with an ingress controller in front, you may find that gRPC requests fail even with correct Emissary configuration.
-A simple way around this is to use $productName$ with a `LoadBalancer` service, rather than an Ingress controller. You can also consider using [$productName$ as your Ingress Controller](../../topics/running/ingress-controller).
+A simple way around this is to use Emissary with a `LoadBalancer` service, rather than an Ingress controller. You can also consider using [Emissary as your Ingress Controller](../../topics/running/ingress-controller).
### Mappings with hosts
@@ -381,7 +383,7 @@ spec:
host: api.example.com
```
-Some gRPC client libraries produce requests where the `host` or `:authority` header includes the port number. For example, a request to the above service might include `host: api.example.com:443` instead of just `host: api.example.com`. To avoid having $productName$ return a 404 (not found) response to these requests due to the mismatched host, you may want to set `strip_matching_host_port` in the [Ambassador module](../../topics/running/ambassador#strip-matching-host-port).
+Some gRPC client libraries produce requests where the `host` or `:authority` header includes the port number. For example, a request to the above service might include `host: api.example.com:443` instead of just `host: api.example.com`. To avoid having Emissary return a 404 (not found) response to these requests due to the mismatched host, you may want to set `strip_matching_host_port` in the [Ambassador module](../../topics/running/ambassador#strip-matching-host-port).
Alternately, you may find it cleaner to make sure your gRPC client does not include the port in the `host` header. Here is an example using gRPC/Go.
@@ -400,4 +402,4 @@ conn, err := grpc.Dial(hostname+":"+port, opts...)
## gRPC-Web
-$productName$ also supports the [gRPC-Web](../../topics/running/ambassador#grpc) protocol for browser-based gRPC applications.
+Emissary also supports the [gRPC-Web](../../topics/running/ambassador#grpc) protocol for browser-based gRPC applications.
diff --git a/content/en/docs/2.5/howtos/index.md b/content/en/docs/2.5/howtos/index.md
deleted file mode 100644
index f16cdd46..00000000
--- a/content/en/docs/2.5/howtos/index.md
+++ /dev/null
@@ -1,25 +0,0 @@
-# "How-to" guides
-
-These guides are designed to help users quickly accomplish common tasks. The guides assume a certain level of understanding of $productName$. Many of these guides are contributed by third parties; we welcome contributions via Pull Request at https://github.com/emissary-ingress/emissary.
-
-* Integrating with Service Mesh. $productName$ natively integrates with many service meshes.
- * [HashiCorp Consul](consul)
- * [Istio](istio)
- * [Linkerd](linkerd2)
-* Distributed tracing. $productName$ natively supports a number of distributed tracing systems to enable developers to visualize request flow in microservice and service-oriented architectures.
- * [Datadog](tracing-datadog)
- * [Zipkin](tracing-zipkin)
-* Monitoring. $productName$ integrates with a number of different monitoring/metrics providers.
- * [Prometheus](prometheus)
-* [Developing Custom Filters](filter-dev-guide)
-* Frameworks and Protocols. $productName$ supports a wide range of protocols and cloud-native frameworks.
- * [gRPC](grpc)
- * [Knative Serverless Framework](knative)
- * [WebSockets](websockets)
-* Security. $productName$ supports a number of strategies for securing Kubernetes services.
- * [Protecting the Diagnostics Interface](protecting-diag-access)
- * [HTTPS and TLS termination](tls-termination)
- * [Certificate Manager](cert-manager) can be used to automatically obtain and renew TLS certificates; $AESproductName$ natively integrates this functionality.
- * [Client Certificate Validation](client-cert-validation)
- * [Basic Authentication](basic-auth) is a tutorial on how to use the external authentication API to code your own authentication service.
- * [Basic Rate Limiting](rate-limiting-tutorial)
diff --git a/content/en/docs/2.5/howtos/istio.md b/content/en/docs/2.5/howtos/istio.md
index 6fa74fcf..153a20e6 100644
--- a/content/en/docs/2.5/howtos/istio.md
+++ b/content/en/docs/2.5/howtos/istio.md
@@ -1,19 +1,19 @@
-import Alert from '@material-ui/lab/Alert';
+---
+title: Istio
+---
-# Istio integration
+Emissary and Istio: Edge Proxy and Service Mesh together in one. Emissary is deployed at the edge of your network and routes incoming traffic to your internal services (aka "north-south" traffic). [Istio](https://istio.io/) is a service mesh for microservices, and is designed to add application-level Layer (L7) observability, routing, and resilience to service-to-service traffic (aka "east-west" traffic). Both Istio and Emissary are built using [Envoy](https://www.envoyproxy.io).
-$productName$ and Istio: Edge Proxy and Service Mesh together in one. $productName$ is deployed at the edge of your network and routes incoming traffic to your internal services (aka "north-south" traffic). [Istio](https://istio.io/) is a service mesh for microservices, and is designed to add application-level Layer (L7) observability, routing, and resilience to service-to-service traffic (aka "east-west" traffic). Both Istio and $productName$ are built using [Envoy](https://www.envoyproxy.io).
-
-$productName$ and Istio can be deployed together on Kubernetes. In this configuration, $productName$ manages
+Emissary and Istio can be deployed together on Kubernetes. In this configuration, Emissary manages
traditional edge functions such as authentication, TLS termination, and edge routing. Istio mediates communication
-from $productName$ to services, and communication between services.
+from Emissary to services, and communication between services.
-This allows the operator to have the best of both worlds: a high performance, modern edge service ($productName$) combined with a state-of-the-art service mesh (Istio). While Istio has introduced a [Gateway](https://istio.io/latest/docs/tasks/traffic-management/ingress/ingress-control/#configuring-ingress-using-an-istio-gateway) abstraction, $productName$ still has a much broader feature set for edge routing than Istio. For more on this topic, see our blog post on [API Gateway vs Service Mesh](https://blog.getambassador.io/api-gateway-vs-service-mesh-104c01fa4784).
+This allows the operator to have the best of both worlds: a high performance, modern edge service (Emissary) combined with a state-of-the-art service mesh (Istio). While Istio has introduced a [Gateway](https://istio.io/latest/docs/tasks/traffic-management/ingress/ingress-control/#configuring-ingress-using-an-istio-gateway) abstraction, Emissary still has a much broader feature set for edge routing than Istio. For more on this topic, see our blog post on [API Gateway vs Service Mesh](https://blog.getambassador.io/api-gateway-vs-service-mesh-104c01fa4784).
-This guide explains how to take advantage of both $productName$ and Istio to have complete control and observability over how requests are made in your cluster:
+This guide explains how to take advantage of both Emissary and Istio to have complete control and observability over how requests are made in your cluster:
- [Install Istio](#install-istio) and configure auto-injection
-- [Install $productName$ with Istio integration](#install-edge)
+- [Install Emissary with Istio integration](#install-edge)
- [Configure an mTLS `TLSContext`](#configure-an-mtls-tlscontext)
- [Route to services using mTLS](#route-to-services-using-mtls)
@@ -32,12 +32,12 @@ To follow this guide, you need:
## Install Istio
Start by [installing Istio](https://istio.io/docs/setup/getting-started/). Any supported installation method for
-Istio will work for use with $productName$.
+Istio will work for use with Emissary.
### Configure Istio Auto-Injection
Istio functions by supplying a sidecar container running Envoy with every service in the mesh (including
-$productName$). The sidecar is what enforces Istio policies for traffic to and from the service, notably
+Emissary). The sidecar is what enforces Istio policies for traffic to and from the service, notably
including mTLS encryption and certificate handling. As such, it is very important that the sidecar be
correctly supplied for every service in the mesh!
@@ -56,16 +56,16 @@ kubectl label namespace $namespace istio-injection=enabled --overwrite
sidecar.
-## Install $productName$ with Istio Integration
+## Install Emissary with Istio Integration
-Properly integrating $productName$ with Istio provides support for:
+Properly integrating Emissary with Istio provides support for:
* [Mutual TLS (mTLS)](../../topics/running/tls/mtls/), with certificates managed by Istio, to allow end-to-end encryption
for east-west traffic;
* Automatic generation of Prometheus metrics for services; and
* Istio distributed tracing for end-to-end observability.
-The simplest way to enable everything is to install $productName$ using [Helm](https://helm.sh), though
+The simplest way to enable everything is to install Emissary using [Helm](https://helm.sh), though
you can use manual installation with YAML if you wish.
### Installation with Helm (Recommended)
@@ -73,28 +73,28 @@ you can use manual installation with YAML if you wish.
To install with Helm, write the following YAML to a file called `istio-integration.yaml`:
```yaml
-# Listeners are required in $productName$ 2.0.
+# Listeners are required in Emissary 2.0.
# This will create the two default Listeners for HTTP on port 8080 and HTTPS on port 8443.
createDefaultListeners: true
-# These are annotations that will be added to the $productName$ pods.
+# These are annotations that will be added to the Emissary pods.
podAnnotations:
# These first two annotations tell Istio not to try to do port management for the
- # $productName$ pod itself. Though these annotations are placed on the $productName$
+ # Emissary pod itself. Though these annotations are placed on the Emissary
# pods, they are interpreted by Istio.
traffic.sidecar.istio.io/includeInboundPorts: "" # do not intercept any inbound ports
traffic.sidecar.istio.io/includeOutboundIPRanges: "" # do not intercept any outbound traffic
# We use proxy.istio.io/config to tell the Istio proxy to write newly-generated mTLS certificates
# into /etc/istio-certs, which will be mounted below. Though this annotation is placed on the
- # $productName$ pods, it is interpreted by Istio.
+ # Emissary pods, it is interpreted by Istio.
proxy.istio.io/config: |
proxyMetadata:
OUTPUT_CERTS: /etc/istio-certs
# We use sidecar.istio.io/userVolumeMount to tell the Istio sidecars to mount the istio-certs
# volume at /etc/istio-certs, allowing the sidecars to see the generated certificates. Though
- # this annotation is placed on the $productName$ pods, it is interpreted by Istio.
+ # this annotation is placed on the Emissary pods, it is interpreted by Istio.
sidecar.istio.io/userVolumeMount: '[{"name": "istio-certs", "mountPath": "/etc/istio-certs"}]'
# We define a single storage volume called "istio-certs". It starts out empty, and Istio
@@ -105,16 +105,16 @@ volumes:
medium: Memory
name: istio-certs
-# We also tell $productName$ to mount the "istio-certs" volume at /etc/istio-certs in the
-# $productName$ pod. This gives $productName$ access to the mTLS certificates, too.
+# We also tell Emissary to mount the "istio-certs" volume at /etc/istio-certs in the
+# Emissary pod. This gives Emissary access to the mTLS certificates, too.
volumeMounts:
- name: istio-certs
mountPath: /etc/istio-certs/
readOnly: true
-# Finally, we need to set some environment variables for $productName$.
+# Finally, we need to set some environment variables for Emissary.
env:
- # AMBASSADOR_ISTIO_SECRET_DIR tells $productName$ to look for Istio mTLS certs, and to
+ # AMBASSADOR_ISTIO_SECRET_DIR tells Emissary to look for Istio mTLS certs, and to
# make them available as a secret named "istio-certs".
AMBASSADOR_ISTIO_SECRET_DIR: "/etc/istio-certs"
@@ -123,7 +123,7 @@ env:
AMBASSADOR_ENVOY_BASE_ID: "1"
```
-To install $productName$ with Helm, use these values to configure Istio integration:
+To install Emissary with Helm, use these values to configure Istio integration:
1. Create the `$productNamespace$` Namespace:
@@ -144,7 +144,7 @@ To install $productName$ with Helm, use these values to configure Istio integrat
helm repo update
```
-4. Use Helm to install $productName$ in $productNamespace$:
+4. Use Helm to install Emissary in $productNamespace$:
```bash
helm install $productHelmName$ --namespace $productNamespace$ -f istio-integration.yaml datawire/$productHelmName$ && \
@@ -156,31 +156,31 @@ To install $productName$ with Helm, use these values to configure Istio integrat
To install using YAML files, you need to manually incorporate the contents of the `istio-integration.yaml`
file shown above into your deployment YAML:
-* `pod-annotations` should be configured as Kubernetes `annotations` on the $productName$ Pods;
+* `pod-annotations` should be configured as Kubernetes `annotations` on the Emissary Pods;
* `volumes`, `volumeMounts`, and `env` contents should be included in the $productDeploymentName$ Deployment; and
* you must also label the $productNamespace$ Namespace for auto-injection as described above.
### Configuring an Existing Installation
-If you have already installed $productName$ and want to enable Istio:
+If you have already installed Emissary and want to enable Istio:
1. Install Istio.
2. Label the $productNamespace$ namespace for Istio auto-injection, as above.
-2. Edit the $productName$ Deployments to contain the `annotations`, `volumes`, `volumeMounts`, and `env` elements
+2. Edit the Emissary Deployments to contain the `annotations`, `volumes`, `volumeMounts`, and `env` elements
shown above.
* If you installed with Helm, you can use `helm upgrade` with `-f istio-integration.yaml` to modify the
installation for you.
-3. Restart the $productName$ pods.
+3. Restart the Emissary pods.
## Configure an mTLS `TLSContext`
-After configuring $productName$ for Istio integration, the Istio mTLS certificates are available within
-$productName$:
+After configuring Emissary for Istio integration, the Istio mTLS certificates are available within
+Emissary:
-- Both the `istio-proxy` sidecar and $productName$ mount the `istio-certs` volume at `/etc/istio-certs`.
+- Both the `istio-proxy` sidecar and Emissary mount the `istio-certs` volume at `/etc/istio-certs`.
- The `istio-proxy` sidecar saves the mTLS certificates into `/etc/istio-certs` (per the `OUTPUT_CERTS`
environment variable).
-- $productName$ reads the mTLS certificates from `/etc/istio-certs` (per the `AMBASSADOR_ISTIO_SECRET_DIR`
+- Emissary reads the mTLS certificates from `/etc/istio-certs` (per the `AMBASSADOR_ISTIO_SECRET_DIR`
environment variable) and creates a Secret named `istio-certs`.
@@ -221,7 +221,7 @@ This `Mapping` will use mTLS when communicating with its upstream service.
## Route to Services Using mTLS
-After integrating $productName$ with Istio, $productName$'s feature-rich routing capabilities and Istio's mTLS
+After integrating Emissary with Istio, Emissary's feature-rich routing capabilities and Istio's mTLS
and observability are all available for all incoming traffic. To take full advantage of both, you need to:
- configure upstream services with the Istio sidecar;
@@ -242,7 +242,7 @@ as discussed above.
### Configure `Mapping`s to Use mTLS
-Traffic routing in $productName$ is configured with the [`Mapping`](../../topics/using/intro-mappings) resource.
+Traffic routing in Emissary is configured with the [`Mapping`](../../topics/using/intro-mappings) resource.
This is a powerful configuration object that lets you configure different routing rules for different services.
To configure a `Mapping` to use mTLS, you need to use the `tls` element of the `Mapping` to tell it to originate
@@ -301,9 +301,9 @@ The behavior of your service will not seem to change, even though mTLS is active
}
```
-This request first went to $productName$, which routed it over an mTLS connection to the quote service in the
+This request first went to Emissary, which routed it over an mTLS connection to the quote service in the
default namespace. That connection was intercepted by the `istio-proxy` which authenticated the request as
-being from $productName$, exported various metrics, and finally forwarded it on to the actual quote service.
+being from Emissary, exported various metrics, and finally forwarded it on to the actual quote service.
### Configure Service Ports
@@ -401,7 +401,7 @@ The Istio sidecar also supports [distributed tracing](https://istio.io/docs/task
by default. To take advantage of this support, you need to:
1. Install a tracing provider, for example [Zipkin](../tracing-zipkin) into your cluster.
-2. Add a [`TracingService`](../../topics/running/services/tracing-service) to tell $productName$ to send tracing
+2. Add a [`TracingService`](../../topics/running/services/tracing-service) to tell Emissary to send tracing
to your tracing provider, for example:
```yaml
@@ -420,7 +420,7 @@ by default. To take advantage of this support, you need to:
- ":path"
```
-After adding a `TracingService`, restart $productName$ for the configuration to take effect. Istio propagates
+After adding a `TracingService`, restart Emissary for the configuration to take effect. Istio propagates
the tracing headers automatically, allowing for end-to-end observability within the cluster.
## FAQ
@@ -429,9 +429,9 @@ the tracing headers automatically, allowing for end-to-end observability within
By default, Istio mTLS certificates are valid for 90 days, but get rotated every day.
-$productName$ updates the mTLS certificates as they are rotated, so you don't need to worry about certificate expiration.
+Emissary updates the mTLS certificates as they are rotated, so you don't need to worry about certificate expiration.
-To test that $productName$ is properly rotating certificates, shorten the TTL of the Istio certificates by
+To test that Emissary is properly rotating certificates, shorten the TTL of the Istio certificates by
setting the following environment variables in the `istiod` container in the `istio-system` Namespace:
```yaml
diff --git a/content/en/docs/2.5/howtos/knative.md b/content/en/docs/2.5/howtos/knative.md
index f995eaaa..21b8a5f8 100644
--- a/content/en/docs/2.5/howtos/knative.md
+++ b/content/en/docs/2.5/howtos/knative.md
@@ -1,4 +1,6 @@
-# Knative Serverless Framework
+---
+title: Knative
+---
[Knative](https://knative.dev/) is a popular Kubernetes-based platform for managing serverless workloads with two main components:
diff --git a/content/en/docs/2.5/howtos/linkerd2.md b/content/en/docs/2.5/howtos/linkerd2.md
index 09352941..aab60d39 100644
--- a/content/en/docs/2.5/howtos/linkerd2.md
+++ b/content/en/docs/2.5/howtos/linkerd2.md
@@ -1,21 +1,21 @@
---
-description: "A guide to using Linkerd 2 Auto-Inject to mesh a service and using $productName$ to dynamically route requests to that service."
+title: Linkerd 2
+description: "A guide to using Linkerd 2 Auto-Inject to mesh a service and using Emissary to dynamically route requests to that service."
---
-# Linkerd 2 integration
-[Linkerd 2](https://www.linkerd.io) is a zero-config and ultra-lightweight service mesh. $productName$ natively supports Linkerd 2 for service discovery, end-to-end TLS (including mTLS between services), and (with Linkerd 2.8) multicluster operation.
+[Linkerd 2](https://www.linkerd.io) is a zero-config and ultra-lightweight service mesh. Emissary natively supports Linkerd 2 for service discovery, end-to-end TLS (including mTLS between services), and (with Linkerd 2.8) multicluster operation.
## Architecture
Linkerd 2 is designed for simplicity, security, and performance. In the cluster, it runs a control plane in its own namespace and then injects sidecar proxy containers in every Pod that should be meshed.
-$productName$ itself also needs to be interwoven or "meshed" with Linkerd 2, and then configured to add special Linkerd headers to requests that tell Linkerd 2 where to forward them. This ie because mTLS between services is automatically handled by the control plane and the proxies. Istio and Consul allow $productName$ to initiate mTLS connections to upstream services by grabbing a certificate from a Kubernetes Secret. However, Linkerd 2 does not work this way, so $productName$ must rely on Linkerd 2 for mTLS connections to upstream services. This means we want Linkerd 2 to inject its sidecar into $productName$'s pods, but not Istio and Consul.
+Emissary itself also needs to be interwoven or "meshed" with Linkerd 2, and then configured to add special Linkerd headers to requests that tell Linkerd 2 where to forward them. This ie because mTLS between services is automatically handled by the control plane and the proxies. Istio and Consul allow Emissary to initiate mTLS connections to upstream services by grabbing a certificate from a Kubernetes Secret. However, Linkerd 2 does not work this way, so Emissary must rely on Linkerd 2 for mTLS connections to upstream services. This means we want Linkerd 2 to inject its sidecar into Emissary's pods, but not Istio and Consul.
-Through that setup, $productName$ terminates external TLS as the gateway and traffic is then immediately wrapped into mTLS by Linkerd 2 again. Thus we have a full end-to-end TLS encryption chain.
+Through that setup, Emissary terminates external TLS as the gateway and traffic is then immediately wrapped into mTLS by Linkerd 2 again. Thus we have a full end-to-end TLS encryption chain.
## Getting started
-In this guide, you will use Linkerd 2 Auto-Inject to mesh a service and use $productName$ to dynamically route requests to that service based on Linkerd 2's service discovery data. If you already have $productName$ installed, you will just need to install Linkerd 2 and deploy your service.
+In this guide, you will use Linkerd 2 Auto-Inject to mesh a service and use Emissary to dynamically route requests to that service based on Linkerd 2's service discovery data. If you already have Emissary installed, you will just need to install Linkerd 2 and deploy your service.
Setting up Linkerd 2 requires to install three components. The first is the CLI on your local machine, the second is the actual Linkerd 2 control plane in your Kubernetes Cluster. Finally, you have to inject your services' Pods with Linkerd Sidecars to mesh them.
@@ -53,9 +53,9 @@ Setting up Linkerd 2 requires to install three components. The first is the CLI
Note that this simple command automatically enables mTLS by default and registers the AutoInject Webhook with your Kubernetes API Server. You now have a production-ready Linkerd 2 setup rolled out into your cluster!
-3. Deploy $productName$. This howto assumes you have already followed the $productName$ [Getting Started](../../tutorials/getting-started) guide. If you haven't done that already, you should do that now.
+3. Deploy Emissary. This howto assumes you have already followed the Emissary [Getting Started](../../tutorials/getting-started) guide. If you haven't done that already, you should do that now.
-4. Configure $productName$ to add it to the Linkerd 2 service mesh.
+4. Configure Emissary to add it to the Linkerd 2 service mesh.
```
kubectl -n emissary get deploy emissary-ingress -o yaml | \
@@ -64,11 +64,11 @@ Setting up Linkerd 2 requires to install three components. The first is the CLI
kubectl apply -f -
```
- This will tell $productName$ to add additional headers to each request forwarded to Linkerd 2 with information about where to route this request to. This is a general setting. You can also set `add_linkerd_headers` per [Mapping](../../topics/using/mappings).
+ This will tell Emissary to add additional headers to each request forwarded to Linkerd 2 with information about where to route this request to. This is a general setting. You can also set `add_linkerd_headers` per [Mapping](../../topics/using/mappings).
## Routing to Linkerd 2 services
-You'll now register a demo application with Linkerd 2, and show how $productName$ can route to this application using endpoint data from Linkerd 2.
+You'll now register a demo application with Linkerd 2, and show how Emissary can route to this application using endpoint data from Linkerd 2.
1. Enable [AutoInjection](https://linkerd.io/2/features/proxy-injection/) on the Namespace you are about to deploy to:
```yaml
@@ -178,7 +178,7 @@ You'll now register a demo application with Linkerd 2, and show how $productName
```
kubectl apply -f qotm-mapping.yaml
```
- to apply this configuration to your Kubernetes cluster. Note that in the above config there is nothing special to make it work with Linkerd 2. The general config for $productName$ already adds Linkerd Headers when forwarding requests to the service mesh.
+ to apply this configuration to your Kubernetes cluster. Note that in the above config there is nothing special to make it work with Linkerd 2. The general config for Emissary already adds Linkerd Headers when forwarding requests to the service mesh.
1. Send a request to the `qotm-Linkerd2` API.
@@ -188,19 +188,19 @@ You'll now register a demo application with Linkerd 2, and show how $productName
{"hostname":"qotm-749c675c6c-hq58f","ok":true,"quote":"The last sentence you read is often sensible nonsense.","time":"2019-03-29T22:21:42.197663","version":"1.7"}
```
-Congratulations! You're successfully routing traffic to the QOTM application, the location of which is registered in Linkerd 2. The traffic to $productName$ is not TLS secured, but from $productName$ to the QOTM an automatic mTLS connection is being used.
+Congratulations! You're successfully routing traffic to the QOTM application, the location of which is registered in Linkerd 2. The traffic to Emissary is not TLS secured, but from Emissary to the QOTM an automatic mTLS connection is being used.
-If you now [configure TLS termination](../../topics/running/tls) in $productName$, you have an end-to-end secured connection.
+If you now [configure TLS termination](../../topics/running/tls) in Emissary, you have an end-to-end secured connection.
## Multicluster operation
-Linkerd 2.8 can support [multicluster operation](https://linkerd.io/2/features/multicluster/), where the Linkerd mesh transparently bridges from one cluster to another, allowing seamless access between the two. This works using the Linkerd "[service mirror controller](https://linkerd.io/2020/02/25/multicluster-kubernetes-with-service-mirroring/#step-1-service-discovery)" to discover services in the target cluster, and expose (mirror) them in the source cluster. Requests to mirrored services in the source cluster are transparently proxied via $productName$ in the target cluster to the appropriate target service, using Linkerd's [automatic mTLS](https://linkerd.io/2/features/automatic-mtls/) to protect the requests in flight between clusters. By configuring Linkerd to use the existing $productName$ as the ingress gateway between clusters, you eliminate the need to deploy and manage an additional ingress gateway.
+Linkerd 2.8 can support [multicluster operation](https://linkerd.io/2/features/multicluster/), where the Linkerd mesh transparently bridges from one cluster to another, allowing seamless access between the two. This works using the Linkerd "[service mirror controller](https://linkerd.io/2020/02/25/multicluster-kubernetes-with-service-mirroring/#step-1-service-discovery)" to discover services in the target cluster, and expose (mirror) them in the source cluster. Requests to mirrored services in the source cluster are transparently proxied via Emissary in the target cluster to the appropriate target service, using Linkerd's [automatic mTLS](https://linkerd.io/2/features/automatic-mtls/) to protect the requests in flight between clusters. By configuring Linkerd to use the existing Emissary as the ingress gateway between clusters, you eliminate the need to deploy and manage an additional ingress gateway.
### Initial multicluster setup
-1. Install $productName$ and the [Linkerd multicluster control plane](https://linkerd.io/2/tasks/installing-multicluster/). Make sure you've also linked the clusters.
+1. Install Emissary and the [Linkerd multicluster control plane](https://linkerd.io/2/tasks/installing-multicluster/). Make sure you've also linked the clusters.
-2. Inject $productName$ deployment with Linkerd (even if you have AutoInject enabled):
+2. Inject Emissary deployment with Linkerd (even if you have AutoInject enabled):
```
kubectl -n emissary get deploy emissary-ingress -o yaml | \
@@ -210,19 +210,19 @@ Linkerd 2.8 can support [multicluster operation](https://linkerd.io/2/features/m
kubectl apply -f -
```
- (It's important to require identity on the gateway port so that automatic mTLS works, but it's also important to let $productName$ handle its own ports. AutoInject can't handle this on its own.)
+ (It's important to require identity on the gateway port so that automatic mTLS works, but it's also important to let Emissary handle its own ports. AutoInject can't handle this on its own.)
-3. Configure $productName$ as normal for your application.
+3. Configure Emissary as normal for your application.
-At this point, your $productName$ installation should work fine with multicluster Linkerd as a source cluster: you can configure Linkerd to bridge to a target cluster, and all should be well.
+At this point, your Emissary installation should work fine with multicluster Linkerd as a source cluster: you can configure Linkerd to bridge to a target cluster, and all should be well.
### Using the cluster as a target cluster
-Allowing the $productName$ installation to serve as a target cluster requires explicitly giving permission for Linkerd to mirror services from the cluster, and explicitly telling Linkerd to use $productName$ as the target gateway.
+Allowing the Emissary installation to serve as a target cluster requires explicitly giving permission for Linkerd to mirror services from the cluster, and explicitly telling Linkerd to use Emissary as the target gateway.
-1. Configure the target cluster $productName$ to allow insecure routing.
+1. Configure the target cluster Emissary to allow insecure routing.
- When $productName$ is running in a Linkerd mesh, Linkerd provides transport security, so connections coming in from the Linkerd in the source cluster will always be HTTP when they reach $productName$. Therefore, the `Host` CRDs corresponding to services that you'll be accessing from the source cluster *must* be configured to `Route` insecure requests. More information on this topic is available in the [`Host` documentation](../../topics/running/host-crd); an example might be
+ When Emissary is running in a Linkerd mesh, Linkerd provides transport security, so connections coming in from the Linkerd in the source cluster will always be HTTP when they reach Emissary. Therefore, the `Host` CRDs corresponding to services that you'll be accessing from the source cluster *must* be configured to `Route` insecure requests. More information on this topic is available in the [`Host` documentation](../../topics/running/host-crd); an example might be
```yaml
apiVersion: getambassador.io/v3alpha1
@@ -238,7 +238,7 @@ Allowing the $productName$ installation to serve as a target cluster requires ex
action: Route
```
-2. Configure the target cluster $productName$ to support Linkerd health checks.
+2. Configure the target cluster Emissary to support Linkerd health checks.
Multicluster Linkerd does its own health checks beyond what Kubernetes does, so a `Mapping` is needed to allow Linkerd's health checks to succeed:
@@ -256,13 +256,13 @@ Allowing the $productName$ installation to serve as a target cluster requires ex
bypass_auth: true
```
- When configuring $productName$, Kubernetes is usually configured to run health checks directly against port 8877 -- however, that port is not meant to be exposed outside the cluster. The `Mapping` permits accessing the health check endpoint without directly exposing the port.
+ When configuring Emissary, Kubernetes is usually configured to run health checks directly against port 8877 -- however, that port is not meant to be exposed outside the cluster. The `Mapping` permits accessing the health check endpoint without directly exposing the port.
(The actual prefix in the `Mapping` is not terribly important, but it needs to match the metadata supplied to the service mirror controller, below.)
-3. Configure the target cluster $productName$ for the service mirror controller.
+3. Configure the target cluster Emissary for the service mirror controller.
- This requires changes to the $productName$'s `deployment` and `service`. **For all of these commands, you will need to make sure your Kubernetes context is set to talk to the target cluster.**
+ This requires changes to the Emissary's `deployment` and `service`. **For all of these commands, you will need to make sure your Kubernetes context is set to talk to the target cluster.**
In the `deployment`, you need the `config.linkerd.io/enable-gateway` `annotation`:
@@ -279,7 +279,7 @@ Allowing the $productName$ installation to serve as a target cluster requires ex
In the `service`, you need to provide appropriate named `port` definitions:
- `mc-gateway` needs to be defined as `port` 4143
- - `mc-probe` needs to be defined as `port` 80, `targetPort` 8080 (or wherever $productName$ is listening)
+ - `mc-probe` needs to be defined as `port` 80, `targetPort` 8080 (or wherever Emissary is listening)
```
kubectl -n emissary patch svc emissary-ingress --type='json' -p='[
@@ -303,7 +303,7 @@ Allowing the $productName$ installation to serve as a target cluster requires ex
(Here, the value of `mirror.linkerd.io/probe-path` must match the `prefix` using for the probe `Mapping` above.)
-4. Configure individual exported services. Adding the following annotations to a service will tell the service to use $productName$ as the gateway:
+4. Configure individual exported services. Adding the following annotations to a service will tell the service to use Emissary as the gateway:
```
kubectl -n $namespace patch svc $service -p='
@@ -314,7 +314,7 @@ Allowing the $productName$ installation to serve as a target cluster requires ex
'
```
- This annotation will tell Linkerd that the given service can be reached via the $productName$ in the `emissary` namespace.
+ This annotation will tell Linkerd that the given service can be reached via the Emissary in the `emissary` namespace.
5. Verify that all is well from the source cluster.
@@ -326,7 +326,7 @@ Allowing the $productName$ installation to serve as a target cluster requires ex
linkerd check --multicluster
```
- Next, make sure that the $productName$ gateway shows up when listing active gateways:
+ Next, make sure that the Emissary gateway shows up when listing active gateways:
```
linkerd multicluster gateways
@@ -336,4 +336,4 @@ Allowing the $productName$ installation to serve as a target cluster requires ex
## More information
-For more about $productName$'s integration with Linkerd 2, read the [service discovery configuration](../../topics/running/resolvers) documentation. For further reading about Linkerd 2 multi-cluster, see the [install documentation](https://linkerd.io/2/tasks/installing-multicluster/) and [introduction](https://linkerd.io/2/features/multicluster/).
+For more about Emissary's integration with Linkerd 2, read the [service discovery configuration](../../topics/running/resolvers) documentation. For further reading about Linkerd 2 multi-cluster, see the [install documentation](https://linkerd.io/2/tasks/installing-multicluster/) and [introduction](https://linkerd.io/2/features/multicluster/).
diff --git a/content/en/docs/2.5/howtos/prometheus.md b/content/en/docs/2.5/howtos/prometheus.md
index e3468bc4..e64aa0cb 100644
--- a/content/en/docs/2.5/howtos/prometheus.md
+++ b/content/en/docs/2.5/howtos/prometheus.md
@@ -1,4 +1,6 @@
-# Monitoring with Prometheus and Grafana
+---
+title: Monitoring with Prometheus and Grafana
+---
Prometheus is an open-source monitoring and alerting system. When used
along with Grafana, you can create a dynamic dashboard for monitoring
@@ -7,28 +9,28 @@ ingress into our Kubernetes cluster.
## Deployment
This guide will focus on deploying Prometheus and Grafana alongside
-$productName$ in Kubernetes using the [Prometheus
+Emissary in Kubernetes using the [Prometheus
Operator](https://github.com/coreos/prometheus-operator).
**Note:** Both Prometheus and Grafana can be deployed as standalone
applications outside of Kubernetes. This process is well-documented
within the website and docs within their respective projects.
-### $productName$
+### Emissary
-$productName$ makes it easy to output Envoy-generated
+Emissary makes it easy to output Envoy-generated
statistics to Prometheus. For the remainder of this guide, it is
-assumed that you have installed and configured $productName$
+assumed that you have installed and configured Emissary
into your Kubernetes cluster, and that it is possible for you to
-modify the global configuration of the $productName$
+modify the global configuration of the Emissary
deployment.
-Starting with $productName$ `0.71.0`, Prometheus can scrape stats/metrics
+Starting with Emissary `0.71.0`, Prometheus can scrape stats/metrics
directly from Envoy's `/metrics` endpoint, removing the need to
-[configure $productName$ to output stats to
+[configure Emissary to output stats to
StatsD](#statsd-exporter-output-statistics-to-productname).
-The `/metrics` endpoint can be accessed internally via the $productName$ admin port (default 8877):
+The `/metrics` endpoint can be accessed internally via the Emissary admin port (default 8877):
```
http(s)://ambassador:8877/metrics
@@ -49,17 +51,17 @@ spec:
service: localhost:8877
```
-**Note**: Since `/metrics` in an endpoint on $productName$
+**Note**: Since `/metrics` in an endpoint on Emissary
itself, the `service` field can just reference the admin port on
localhost.
### Using the `cluster_tag` setting
-The metrics that Prometheus scrapes from $productName$ are keyed using
+The metrics that Prometheus scrapes from Emissary are keyed using
the name of the Envoy
[`cluster`](https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/cluster_manager)
that is handling traffic for a given `Mapping`. The name of a given
-`cluster` is generated by $productName$ and, as such, is not necessarily
+`cluster` is generated by Emissary and, as such, is not necessarily
terribly readable.
You can set the `cluster_tag` attribute within a
@@ -78,6 +80,7 @@ standard YAML files. Alternatively, you can install it with
follow the instructions in the README, or simply create the resources
published in the YAML with `kubectl`.
+
```
kubectl create -f https://raw.githubusercontent.com/coreos/prometheus-operator/master/bundle.yaml
```
@@ -147,13 +150,13 @@ standard YAML files. Alternatively, you can install it with
Finally, we need to tell Prometheus where to scrape metrics
from. The Prometheus Operator easily manages this using a
`ServiceMonitor` CRD. To tell Prometheus to scrape metrics from
- $productName$'s `/metrics` endpoint, copy the following
+ Emissary's `/metrics` endpoint, copy the following
YAML to a file called `ambassador-monitor.yaml`, and apply it with
`kubectl`.
- If you are running an $productName$ version higher than 0.71.0 and
+ If you are running an Emissary version higher than 0.71.0 and
want to scrape metrics directly from the `/metrics` endpoint of
- $productName$ running in the `ambassador` namespace:
+ Emissary running in the `ambassador` namespace:
```yaml
---
@@ -174,7 +177,7 @@ standard YAML files. Alternatively, you can install it with
- port: ambassador-admin
```
-Prometheus is now configured to gather metrics from $productName$.
+Prometheus is now configured to gather metrics from Emissary.
### Prometheus Operator with Helm
@@ -188,7 +191,7 @@ will install Prometheus and configure it to monitor your Kubernetes
cluster.
This section will focus on setting up Prometheus to scrape stats from
-$productName$. Configuration of the Helm Chart and analysis of
+Emissary. Configuration of the Helm Chart and analysis of
stats from other cluster components is outside of the scope of this
documentation.
@@ -204,9 +207,9 @@ documentation.
that is looking for `ServiceMonitor`s with `label:
release=prometheus`.
- If you are running an $productName$ version higher than 0.71.0 and
+ If you are running an Emissary version higher than 0.71.0 and
want to scrape metrics directly from the `/metrics` endpoint of
- $productName$ running in the `default` namespace:
+ Emissary running in the `default` namespace:
```yaml
---
@@ -250,7 +253,7 @@ documentation.
- port: prometheus-metrics
```
-Prometheus is now configured to gather metrics from $productName$.
+Prometheus is now configured to gather metrics from Emissary.
#### Prometheus Operator CRDs
@@ -284,12 +287,12 @@ section in the dashboard for each use case.
a Grafana dashboard is created by default. You can use this dashboard
or set `grafana.enabled: false` and follow the instructions below.
-To deploy Grafana behind $productName$: replace
-`{{AMBASSADOR_IP}}` with the IP address or DNS name of your $productName$ service, copy the YAML below, and apply it with `kubectl`:
+To deploy Grafana behind Emissary: replace
+`{{AMBASSADOR_IP}}` with the IP address or DNS name of your Emissary service, copy the YAML below, and apply it with `kubectl`:
**Note:** If you forgot how to get the value of your `AMBASSADOR_IP` or
have not set-up DNS, you can get the IP by using the `kubectl get services -n ambassador`
-command, and select the External-IP of your $productName$ LoadBalancer service.
+command, and select the External-IP of your Emissary LoadBalancer service.
```yaml
---
@@ -369,7 +372,7 @@ spec:
```
Now, create a service and `Mapping` to expose Grafana behind
-$productName$:
+Emissary:
**Note:** Don't forget to replace `{{GRAFANA_NAMESPACE}}` with the
namespace you deployed Grafana to. In our example we used the default namespace,
@@ -390,7 +393,7 @@ spec:
Now, access Grafana by going to `{AMBASSADOR_IP}/grafana/` and logging
in with `username: admin` : `password: admin`.
-Before you can import the $productName$ dashboard. You need to add a data source.
+Before you can import the Emissary dashboard. You need to add a data source.
From the Grafana home page, select `Create your first data source`. Now,
select 'Prometheus'. In the URL section, type in `http://prometheus.default:9090`.
We deployed prometheus to the default namespace in our example, but if you
@@ -404,12 +407,12 @@ From here, select the Prometheus data source we created from the `Prometheus` dr
down menu, and select import to finish adding the dashboard.
In the dashboard we just added, you should now be able to view graphs in the
-`$productName$ Metrics Endpoint` tab.
+`Emissary Metrics Endpoint` tab.
## Viewing stats/metrics
-Above, you have created an environment where $productName$ is handling
+Above, you have created an environment where Emissary is handling
ingress traffic, Prometheus is scraping and collecting statistics from
Envoy, and Grafana is displaying these statistics in a dashboard.
@@ -431,7 +434,7 @@ kubectl port-forward service/prometheus 9090
and going to `http://localhost:9090/` from a web browser
In the UI, click the dropdown and see all of the stats Prometheus is
-able to scrape from $productName$.
+able to scrape from Emissary.
The Prometheus data model is, at its core, time-series
based. Therefore, it makes it easy to represent rates, averages,
@@ -443,9 +446,9 @@ full reference on how to work with this data model.
## Additional install options
-### StatsD Exporter: Output statistics to $productName$
+### StatsD Exporter: Output statistics to Emissary
-If running a pre-`0.71.0` version of $productName$, you will need to
+If running a pre-`0.71.0` version of Emissary, you will need to
configure Envoy to output stats to a separate collector before being
scraped by Prometheus. You will use the [Prometheus StatsD
Exporter](https://github.com/prometheus/statsd_exporter) to do this.
@@ -456,10 +459,10 @@ Exporter](https://github.com/prometheus/statsd_exporter) to do this.
kubectl apply -f https://app.getambassador.io/yaml/v2-docs/$ossVersion$/monitoring/statsd-sink.yaml
```
-2. Configure $productName$ to output statistics to `statsd`
+2. Configure Emissary to output statistics to `statsd`
- In the $productName$ deployment, add the `STATSD_ENABLED`
- and `STATSD_HOST` environment variables to tell $productName$ where to output stats.
+ In the Emissary deployment, add the `STATSD_ENABLED`
+ and `STATSD_HOST` environment variables to tell Emissary where to output stats.
```yaml
...
@@ -475,7 +478,7 @@ Exporter](https://github.com/prometheus/statsd_exporter) to do this.
...
```
-$productName$ is now configured to output statistics to the
+Emissary is now configured to output statistics to the
Prometheus StatsD exporter.
#### ServiceMonitor
diff --git a/content/en/docs/2.5/howtos/protecting-diag-access.md b/content/en/docs/2.5/howtos/protecting-diag-access.md
index edbb34ae..ec601db2 100644
--- a/content/en/docs/2.5/howtos/protecting-diag-access.md
+++ b/content/en/docs/2.5/howtos/protecting-diag-access.md
@@ -1,11 +1,13 @@
-# Protecting Access to the Diagnostics Interface
+---
+title: Protecting Access to the Diagnostics Interface
+---
-Out of the box, $productName$ enables `Mapping`s to provide access to the diagnostics
+Out of the box, Emissary enables `Mapping`s to provide access to the diagnostics
interfaces that can help you debug your installation. In a production environment, though,
public access to these endpoints is not an ideal situation. To solve this, we will be
using the Ambassador `Module` to remove the default mappings, after which we'll create a
new, host-based `mapping` to expose the diagnostics interface more securely. The
-Ambassador `Module` applies system-wide configuration settings for $productName$ to follow.
+Ambassador `Module` applies system-wide configuration settings for Emissary to follow.
```yaml
apiVersion: getambassador.io/v3alpha1
diff --git a/content/en/docs/2.5/howtos/rate-limiting-tutorial.md b/content/en/docs/2.5/howtos/rate-limiting-tutorial.md
index 5f4142fd..a15757e5 100644
--- a/content/en/docs/2.5/howtos/rate-limiting-tutorial.md
+++ b/content/en/docs/2.5/howtos/rate-limiting-tutorial.md
@@ -1,21 +1,21 @@
-import Alert from '@material-ui/lab/Alert';
-
-# Basic rate limiting
+---
+title: Basic Rate Limiting
+---
-This guide applies to $OSSproductName$. It will not work correctly
-on $AESproductName$.
+This guide applies to Emissary. It will not work correctly
+on Ambassador Edge Stack.
-$productName$ can validate incoming requests before routing them to a backing service. In this tutorial, we'll configure $productName$ to use a simple third party rate limit service. (If you don't want to implement your own rate limiting service, $AESproductName$ integrates a [powerful, flexible rate limiting service](/docs/edge-stack/latest/topics/using/rate-limits/rate-limits/).)
+Emissary can validate incoming requests before routing them to a backing service. In this tutorial, we'll configure Emissary to use a simple third party rate limit service. (If you don't want to implement your own rate limiting service, Ambassador Edge Stack integrates a [powerful, flexible rate limiting service](/docs/edge-stack/latest/topics/using/rate-limits/rate-limits/).)
## Before you get started
-This tutorial assumes you have already followed the $productName$ [Installation](../../topics/install/) and [Quickstart Tutorial](../../tutorials/quickstart-demo) guides. If you haven't done that already, you should do so now.
+This tutorial assumes you have already followed the Emissary [Installation](../../topics/install/) and [Quickstart Tutorial](../../tutorials/quickstart-demo) guides. If you haven't done that already, you should do so now.
-Once completed, you'll have a Kubernetes cluster running $productName$ and the Quote service. Let's walk through adding rate limiting to this setup.
+Once completed, you'll have a Kubernetes cluster running Emissary and the Quote service. Let's walk through adding rate limiting to this setup.
## 1. Deploy the rate limit service
-$productName$ delegates the actual rate limit logic to a third party service. We've written a [simple rate limit service](https://github.com/emissary-ingress/emissary/tree/v2.1.0/docker/test-ratelimit) that:
+Emissary delegates the actual rate limit logic to a third party service. We've written a [simple rate limit service](https://github.com/emissary-ingress/emissary/tree/v2.1.0/docker/test-ratelimit) that:
- listens for requests on port 5000;
- handles gRPC `shouldRateLimit` requests;
@@ -75,17 +75,17 @@ spec:
memory: 100Mi
```
-This configuration tells $productName$ about the rate limit service, notably that it is serving requests at `example-rate-limit:5000`. $productName$ will see the `RateLimitService` and reconfigure itself within a few
+This configuration tells Emissary about the rate limit service, notably that it is serving requests at `example-rate-limit:5000`. Emissary will see the `RateLimitService` and reconfigure itself within a few
seconds, allowing incoming requests to be rate-limited.
Note that you can configure the `RateLimitService` to use a specific label `domain`.
If `domain` is not specified (which is the situation here), the default is `ambassador`.
-If $productName$ cannot contact the rate limit service, it will allow the request to be processed as if there were no rate limit service configuration.
+If Emissary cannot contact the rate limit service, it will allow the request to be processed as if there were no rate limit service configuration.
-## 2. Configure $productName$ Mappings
+## 2. Configure Emissary Mappings
-$productName$ only validates requests on `Mapping`s which set labels to use for rate limiting,
+Emissary only validates requests on `Mapping`s which set labels to use for rate limiting,
so you'll need to apply `labels` to your `Mapping`s to enable rate limiting. For more information
on the labelling process, see the [Rate Limits configuration documentation](../../topics/using/rate-limits/).
@@ -95,7 +95,7 @@ on the labelling process, see the [Rate Limits configuration documentation](../.
apiVersion
!
-If $productName$ cannot contact the rate limit service, it will allow the request to be processed as if there were no rate limit service configuration.
+If Emissary cannot contact the rate limit service, it will allow the request to be processed as if there were no rate limit service configuration.
Replace the label that is applied to the `service-backend` with:
@@ -130,7 +130,7 @@ spec:
header_name: "x-ambassador-test-allow"
```
-
+
Note that the `key` could be anything you like, but our example rate limiting service expects it to
match the name of the header. Also note that since our `RateLimitService` expects to use labels in the
diff --git a/content/en/docs/2.5/howtos/route.md b/content/en/docs/2.5/howtos/route.md
index b2d9dc0f..7fd0b04b 100644
--- a/content/en/docs/2.5/howtos/route.md
+++ b/content/en/docs/2.5/howtos/route.md
@@ -1,9 +1,8 @@
---
-description: "$productName$ uses the Mapping resource to map a resource, like a URL prefix, to a Kubernetes service or web service."
+title: Mapping resource
+description: "Emissary uses the Mapping resource to map a resource, like a URL prefix, to a Kubernetes service or web service."
---
-import Alert from '@material-ui/lab/Alert';
-
# Get traffic from the edge
@@ -19,13 +18,13 @@ import Alert from '@material-ui/lab/Alert';
-The core $productName$ resource used to manage cluster ingress is the `Mapping` resource.
+The core Emissary resource used to manage cluster ingress is the `Mapping` resource.
**A `Mapping` resource routes a URL path (or prefix) to a service (either a Kubernetes service or other web service).**
Remember that Listener
and Host
resources are
- required for a functioning $productName$ installation that can route traffic!
+ required for a functioning Emissary installation that can route traffic!
Learn more about Listener
.
Learn more about Host
.
@@ -49,8 +48,8 @@ spec:
| Name | Type | Description |
| :--- | :--- | :--- |
| `metadata.name` | String | Identifies the Mapping. |
-| `spec.prefix` | String | The URL prefix identifying your resource. [See below](#resources) on how $productName$ handles resources. |
-| `spec.service` | String | The service handling the resource. If a Kubernetes service, it must include the namespace (in the format `service.namespace`) if the service is in a different namespace than $productName$. [See below](#services) on service name formatting.|
+| `spec.prefix` | String | The URL prefix identifying your resource. [See below](#resources) on how Emissary handles resources. |
+| `spec.service` | String | The service handling the resource. If a Kubernetes service, it must include the namespace (in the format `service.namespace`) if the service is in a different namespace than Emissary. [See below](#services) on service name formatting.|
Here's another example using a web service that maps requests to `/httpbin/` to `http://httpbin.org` (again, **this is not a
complete example on its own; see below**):
@@ -72,7 +71,7 @@ spec:
For demonstration purposes, here's a possible way of combining a `Listener`, a `Host`, and both `Mapping`s above that is complete and functional:
- it will accept HTTP or HTTPS on port 8443;
-- $productName$ is terminating TLS;
+- Emissary is terminating TLS;
- HTTPS to `foo.example.com` will be routed as above;
- HTTP to `foo.example.com` will be redirected to HTTPS;
- HTTP or HTTPS to other hostnames will be rejected; and
@@ -149,7 +148,7 @@ Note the addition of `label`s and `selector`s to explicitly specify which resour
## Applying a Mapping resource
-A Mapping resource can be managed using the same workflow as any other Kubernetes resources (like a Service or Deployment). For example, if the above Mapping is saved into a file called `httpbin-mapping.yaml`, the following command will apply the configuration directly to $productName$:
+A Mapping resource can be managed using the same workflow as any other Kubernetes resources (like a Service or Deployment). For example, if the above Mapping is saved into a file called `httpbin-mapping.yaml`, the following command will apply the configuration directly to Emissary:
```
kubectl apply -f httpbin-mapping.yaml
@@ -159,13 +158,13 @@ kubectl apply -f httpbin-mapping.yaml
## Resources
-To $productName$, a resource is a group of one or more URLs that all share a common prefix in the URL path. For example, these URLs all share the `/resource1/` path prefix, so `/resource1/` can be considered a single resource:
+To Emissary, a resource is a group of one or more URLs that all share a common prefix in the URL path. For example, these URLs all share the `/resource1/` path prefix, so `/resource1/` can be considered a single resource:
* `https://ambassador.example.com/resource1/foo`
* `https://ambassador.example.com/resource1/bar`
* `https://ambassador.example.com/resource1/baz/zing`
-On the other hand, these URLs share only the prefix `/` -- you _could_ tell $productName$ to treat them as a single resource, but it's probably not terribly useful.
+On the other hand, these URLs share only the prefix `/` -- you _could_ tell Emissary to treat them as a single resource, but it's probably not terribly useful.
* `https://ambassador.example.com/resource1/foo`
* `https://ambassador.example.com/resource2/bar`
@@ -173,7 +172,7 @@ On the other hand, these URLs share only the prefix `/` -- you _could_ tell $pro
Note that the length of the prefix doesn't matter; a prefix like `/v1/this/is/my/very/long/resource/name/` is valid.
-Also note that $productName$ does not actually require the prefix to start and end with `/` -- however, in practice, it's a good idea. Specifying a prefix of `/man` would match all of the following, which probably is not what was intended:
+Also note that Emissary does not actually require the prefix to start and end with `/` -- however, in practice, it's a good idea. Specifying a prefix of `/man` would match all of the following, which probably is not what was intended:
* `https://ambassador.example.com/man/foo`
* `https://ambassador.example.com/mankind`
@@ -181,11 +180,11 @@ Also note that $productName$ does not actually require the prefix to start and e
## Services
-$productName$ routes traffic to a service. A service is defined as `[scheme://]service[.namespace][:port]`. Everything except for the service is optional.
+Emissary routes traffic to a service. A service is defined as `[scheme://]service[.namespace][:port]`. Everything except for the service is optional.
- `scheme` can be either `http` or `https`; if not present, the default is `http`.
- `service` is the name of a service (typically the service name in Kubernetes or Consul); it is not allowed to contain the `.` character.
-- `namespace` is the namespace in which the service is running. Starting with $productName$ 1.0.0, if not supplied, it defaults to the namespace in which the Mapping resource is defined. The default behavior can be configured using the [Module resource](../../topics/running/ambassador). When using a Consul resolver, `namespace` is not allowed.
+- `namespace` is the namespace in which the service is running. Starting with Emissary 1.0.0, if not supplied, it defaults to the namespace in which the Mapping resource is defined. The default behavior can be configured using the [Module resource](../../topics/running/ambassador). When using a Consul resolver, `namespace` is not allowed.
- `port` is the port to which a request should be sent. If not specified, it defaults to `80` when the scheme is `http` or `443` when the scheme is `https`. Note that the [resolver](../../topics/running/resolvers) may return a port in which case the `port` setting is ignored.
While using service.namespace.svc.cluster.local
may work for Kubernetes resolvers, the preferred syntax is service.namespace
.
@@ -220,19 +219,19 @@ spec:
## Best Practices
-$productName$'s configuration is assembled from multiple YAML blocks which are managed by independent application teams. This implies that certain best practices should be followed.
+Emissary's configuration is assembled from multiple YAML blocks which are managed by independent application teams. This implies that certain best practices should be followed.
-#### $productName$'s configuration should be under version control.
+#### Emissary's configuration should be under version control.
-While you can always read back the $productName$'s configuration from Kubernetes or its diagnostic service, the $productName$ will not do versioning for you.
+While you can always read back the Emissary's configuration from Kubernetes or its diagnostic service, the Emissary will not do versioning for you.
-#### $productName$ tries to not start with a broken configuration, but it's not perfect.
+#### Emissary tries to not start with a broken configuration, but it's not perfect.
-Gross errors will result in the $productName$ refusing to start, in which case `kubectl logs` will be helpful. However, it's always possible to map a resource to the wrong service, or use the wrong `rewrite` rules. $productName$ can't detect that on its own, although its [diagnostic service](../../topics/running/diagnostics/) can help you figure it out.
+Gross errors will result in the Emissary refusing to start, in which case `kubectl logs` will be helpful. However, it's always possible to map a resource to the wrong service, or use the wrong `rewrite` rules. Emissary can't detect that on its own, although its [diagnostic service](../../topics/running/diagnostics/) can help you figure it out.
#### Be careful of mapping collisions.
-If two different developers try to map `/myservice/` to something, this can lead to unexpected behavior. $productName$'s [canary deployment](../../topics/using/canary/) logic means that it's more likely that traffic will be split between them than that it will throw an error -- again, the diagnostic service can help you here.
+If two different developers try to map `/myservice/` to something, this can lead to unexpected behavior. Emissary's [canary deployment](../../topics/using/canary/) logic means that it's more likely that traffic will be split between them than that it will throw an error -- again, the diagnostic service can help you here.
#### Unless specified, mapping attributes cannot be applied to any other resource type.
diff --git a/content/en/docs/2.5/howtos/tls-termination.md b/content/en/docs/2.5/howtos/tls-termination.md
index d634c76b..10b4d612 100644
--- a/content/en/docs/2.5/howtos/tls-termination.md
+++ b/content/en/docs/2.5/howtos/tls-termination.md
@@ -1,19 +1,21 @@
-# TLS termination and enabling HTTPS
+---
+title: TLS Termination and Enabling HTTPS
+---
TLS encryption is one of the basic requirements of having a secure system.
-$AESproductName$ [automatically enables TLS termination/HTTPs
+Ambassador Edge Stack [automatically enables TLS termination/HTTPs
](../../topics/running/host-crd#tls-settings), making TLS encryption
easy and centralizing TLS termination for all of your services in Kubernetes.
-While this automatic certificate management in $AESproductName$ helps
-simply TLS configuration in your cluster, the Open-Source $OSSproductName$
+While this automatic certificate management in Ambassador Edge Stack helps
+simply TLS configuration in your cluster, the Open-Source Emissary
still requires you provide your own certificate to enable TLS.
The following will walk you through the process of enabling TLS with a
self-signed certificate created with the `openssl` utility.
**Note** these instructions also work if you would like to provide your own
-certificate to $AESproductName$.
+certificate to Ambassador Edge Stack.
## Prerequisites
@@ -24,9 +26,9 @@ This guide requires you have the following installed:
[`kubectl`](https://kubernetes.io/docs/tasks/tools/install-kubectl/)
- [openssl](https://www.openssl.org/source/)
-## Install $productName$
+## Install Emissary
-[Install $productName$ in Kubernetes](../../topics/install).
+[Install Emissary in Kubernetes](../../topics/install).
## Create a listener listening on the correct port and protocol
We first need to create a listener to tell Emissary which port will be using the HTTPS protocol
@@ -50,7 +52,7 @@ spec:
OpenSSL is a tool that allows us to create self-signed certificates for opening
a TLS encrypted connection. The `openssl` command below will create a
-create a certificate and private key pair that $productName$ can use for TLS
+create a certificate and private key pair that Emissary can use for TLS
termination.
- Create a private key and certificate.
@@ -72,7 +74,7 @@ termination.
## Store the certificate and key in a Kubernetes Secret
-$productName$ dynamically loads TLS certificates by reading them from
+Emissary dynamically loads TLS certificates by reading them from
Kubernetes secrets. Use `kubectl` to create a `tls` secret to hold the pem
files we created above.
@@ -80,14 +82,14 @@ files we created above.
kubectl create secret tls tls-cert --cert=cert.pem --key=key.pem
```
-## Tell $productName$ to use this secret for TLS termination
+## Tell Emissary to use this secret for TLS termination
Now that we have stored our certificate and private key in a Kubernetes secret
-named `tls-cert`, we need to tell $productName$ to use this certificate
-for terminating TLS on a domain. A `Host` is used to tell $productName$ which
+named `tls-cert`, we need to tell Emissary to use this certificate
+for terminating TLS on a domain. A `Host` is used to tell Emissary which
certificate to use for TLS termination on a domain.
-Create the following `Host` to have $productName$ use the `Secret` we created
+Create the following `Host` to have Emissary use the `Secret` we created
above for terminating TLS on all domains.
```yaml
@@ -107,7 +109,7 @@ spec:
hostname: wildcard-host
```
-**Note:** If running multiple instances of $productName$ in one cluster remember to include the `ambassador_id` property in the `spec`, e.g.:
+**Note:** If running multiple instances of Emissary in one cluster remember to include the `ambassador_id` property in the `spec`, e.g.:
```yaml
---
@@ -126,14 +128,14 @@ Apply the `Host` configured above with `kubectl`:
kubectl apply -f wildcard-host.yaml
```
-$productName$ is now configured to listen for TLS traffic on port `8443` and
+Emissary is now configured to listen for TLS traffic on port `8443` and
terminate TLS using the self-signed certificate we created.
## Send a request Over HTTPS
We can now send encrypted traffic over HTTPS.
-First, make sure the $productName$ service is listening on `443` and forwarding
+First, make sure the Emissary service is listening on `443` and forwarding
to port `8443`. Verify this with `kubectl`:
```
@@ -156,9 +158,9 @@ spec:
```
If the output to the `kubectl` command is not similar to the example above,
-edit the $productName$ service to add the `https` port.
+edit the Emissary service to add the `https` port.
-After verifying $productName$ is listening on port 443, send a request
+After verifying Emissary is listening on port 443, send a request
to your backend service with curl:
```
@@ -176,20 +178,20 @@ flag in curl to disable hostname validation.
## Next steps
-This guide walked you through how to enable basic TLS termination in $productName$ using a self-signed certificate for simplicity.
+This guide walked you through how to enable basic TLS termination in Emissary using a self-signed certificate for simplicity.
### Get a valid certificate from a certificate authority
-While a self-signed certificate is a simple and quick way to get $productName$ to terminate TLS, it should not be used by production systems. In order to serve HTTPS traffic without being returned a security warning, you will need to get a certificate from an official Certificate Authority like Let's Encrypt.
+While a self-signed certificate is a simple and quick way to get Emissary to terminate TLS, it should not be used by production systems. In order to serve HTTPS traffic without being returned a security warning, you will need to get a certificate from an official Certificate Authority like Let's Encrypt.
Jetstack's `cert-manager` provides a simple
way to manage certificates from Let's Encrypt. See our documentation for more
-information on how to [use `cert-manager` with $productName$
+information on how to [use `cert-manager` with Emissary
](../cert-manager).
### Enable advanced TLS options
-$productName$ exposes configuration for many more advanced options
+Emissary exposes configuration for many more advanced options
around TLS termination, origination, client certificate validation, and SNI
support. See the full [TLS reference](../../topics/running/tls) for more
information.
diff --git a/content/en/docs/2.5/howtos/tracing-datadog.md b/content/en/docs/2.5/howtos/tracing-datadog.md
index d627e29f..842bc6a0 100644
--- a/content/en/docs/2.5/howtos/tracing-datadog.md
+++ b/content/en/docs/2.5/howtos/tracing-datadog.md
@@ -1,12 +1,14 @@
-# Distributed Tracing with Datadog
+---
+title: Distributed Tracing with Datadog
+---
-In this tutorial, we'll configure $productName$ to initiate a trace on some sample requests, and use DataDog APM to visualize them.
+In this tutorial, we'll configure Emissary to initiate a trace on some sample requests, and use DataDog APM to visualize them.
## Before you get started
-This tutorial assumes you have already followed $productName$ [Getting Started](../../tutorials/getting-started) guide. If you haven't done that already, you should do that now.
+This tutorial assumes you have already followed Emissary [Getting Started](../../tutorials/getting-started) guide. If you haven't done that already, you should do that now.
-After completing the Getting Started guide you will have a Kubernetes cluster running $productName$ and the Quote service. Let's walk through adding tracing to this setup.
+After completing the Getting Started guide you will have a Kubernetes cluster running Emissary and the Quote service. Let's walk through adding tracing to this setup.
## 1. Configure the DataDog agent
@@ -16,7 +18,7 @@ You will need to configure the DataDog agent so that it uses a host-port and acc
DataDog APM can [correlate traces with logs](https://docs.datadoghq.com/tracing/advanced/connect_logs_and_traces/) if you propagate the current span and trace IDs with your logs.
-When using JSON logging with Envoy, $productName$ will automatically append the `dd.trace_id` and `dd.span_id` properties to all logs so that correlation works:
+When using JSON logging with Envoy, Emissary will automatically append the `dd.trace_id` and `dd.span_id` properties to all logs so that correlation works:
```yaml
---
@@ -31,7 +33,7 @@ spec:
## 3. Configure the TracingService
-Next configure a TracingService that will write your traces using the DataDog tracing driver, as you want to write traces to your host-local DataDog agent you can use the `${HOST_IP}` interpolation to get the host IP address from the $productName$ containers environment.
+Next configure a TracingService that will write your traces using the DataDog tracing driver, as you want to write traces to your host-local DataDog agent you can use the `${HOST_IP}` interpolation to get the host IP address from the Emissary containers environment.
```yaml
---
@@ -48,7 +50,7 @@ spec:
## 4. Generate some requests
-Use `curl` to generate a few requests to an existing $productName$ mapping. You may need to perform many requests, since only a subset of random requests are sampled and instrumented with traces.
+Use `curl` to generate a few requests to an existing Emissary mapping. You may need to perform many requests, since only a subset of random requests are sampled and instrumented with traces.
```
$ curl -L $AMBASSADOR_IP/httpbin/ip
diff --git a/content/en/docs/2.5/howtos/tracing-zipkin.md b/content/en/docs/2.5/howtos/tracing-zipkin.md
index 37ddc902..874a2fb3 100644
--- a/content/en/docs/2.5/howtos/tracing-zipkin.md
+++ b/content/en/docs/2.5/howtos/tracing-zipkin.md
@@ -1,20 +1,20 @@
-import Alert from '@material-ui/lab/Alert';
-
-# Distributed tracing with Zipkin
+---
+title: Distributed tracing with Zipkin
+---
-In this tutorial, we'll configure $productName$ to initiate a trace on some sample requests, and use Zipkin to visualize them.
+In this tutorial, we'll configure Emissary to initiate a trace on some sample requests, and use Zipkin to visualize them.
## Before you get started
-This tutorial assumes you have already followed $productName$ [Getting Started](../../tutorials/getting-started) guide. If you haven't done that already, you should do that now.
+This tutorial assumes you have already followed Emissary [Getting Started](../../tutorials/getting-started) guide. If you haven't done that already, you should do that now.
-After completing the Getting Started guide you will have a Kubernetes cluster running $productName$ and the Quote service. Let's walk through adding tracing to this setup.
+After completing the Getting Started guide you will have a Kubernetes cluster running Emissary and the Quote service. Let's walk through adding tracing to this setup.
## 1. Deploy Zipkin
-In this tutorial, you will use a simple deployment of the open-source [Zipkin](https://github.com/openzipkin/zipkin/wiki) distributed tracing system to store and visualize $productName$-generated traces. The trace data will be stored in memory within the Zipkin container, and you will be able to explore the traces via the Zipkin web UI.
+In this tutorial, you will use a simple deployment of the open-source [Zipkin](https://github.com/openzipkin/zipkin/wiki) distributed tracing system to store and visualize Emissary-generated traces. The trace data will be stored in memory within the Zipkin container, and you will be able to explore the traces via the Zipkin web UI.
-First, add the following YAML to a file named `zipkin.yaml`. This configuration will create a Zipkin Deployment that uses the [openzipkin/zipkin](https://hub.docker.com/r/openzipkin/zipkin/) container image and also an associated Service. We will also include a `TracingService` that configures $productName$ to use the Zipkin service (running on the default port of 9411) to provide tracing support.
+First, add the following YAML to a file named `zipkin.yaml`. This configuration will create a Zipkin Deployment that uses the [openzipkin/zipkin](https://hub.docker.com/r/openzipkin/zipkin/) container image and also an associated Service. We will also include a `TracingService` that configures Emissary to use the Zipkin service (running on the default port of 9411) to provide tracing support.
```yaml
---
@@ -70,18 +70,18 @@ Next, deploy this configuration into your cluster:
$ kubectl apply -f zipkin.yaml
```
-As a final step we want to restart $productName$ as this is necessary to add the tracing header. This command will restart all the Pods (assuming $productName$ is installed in the ambassador
namespace):
+As a final step we want to restart Emissary as this is necessary to add the tracing header. This command will restart all the Pods (assuming Emissary is installed in the ambassador
namespace):
```
$ kubectl -n ambassador rollout restart deploy
```
- Restarting $productName$ is required after deploying a Tracing Service for changes to take effect.
+ Restarting Emissary is required after deploying a Tracing Service for changes to take effect.
## 2. Generate some requests
-Use `curl` to generate a few requests to an existing $productName$ `Mapping`. You may need to perform many requests since only a subset of random requests are sampled and instrumented with traces.
+Use `curl` to generate a few requests to an existing Emissary `Mapping`. You may need to perform many requests since only a subset of random requests are sampled and instrumented with traces.
```
$ curl -L $AMBASSADOR_IP/backend/
diff --git a/content/en/docs/2.5/howtos/websockets.md b/content/en/docs/2.5/howtos/websockets.md
index 25cac7da..95925b23 100644
--- a/content/en/docs/2.5/howtos/websockets.md
+++ b/content/en/docs/2.5/howtos/websockets.md
@@ -1,6 +1,8 @@
-# WebSocket connections
+---
+title: WebSockets
+---
-$productName$ makes it easy to access your services from outside your
+Emissary makes it easy to access your services from outside your
application, and this includes services that use WebSockets. Only a
small amount of additional configuration is required, which is as
simple as telling the Mapping to allow "upgrading" from the HTTP protocol to
diff --git a/content/en/docs/2.5/release-notes/edge-stack-1.13.4.png b/content/en/docs/2.5/release-notes/edge-stack-1.13.4.png
deleted file mode 100644
index 954ac1a9..00000000
Binary files a/content/en/docs/2.5/release-notes/edge-stack-1.13.4.png and /dev/null differ
diff --git a/content/en/docs/2.5/release-notes/edge-stack-1.13.7-json-logging.png b/content/en/docs/2.5/release-notes/edge-stack-1.13.7-json-logging.png
deleted file mode 100644
index 4a47cbdf..00000000
Binary files a/content/en/docs/2.5/release-notes/edge-stack-1.13.7-json-logging.png and /dev/null differ
diff --git a/content/en/docs/2.5/release-notes/edge-stack-1.13.7-memory.png b/content/en/docs/2.5/release-notes/edge-stack-1.13.7-memory.png
deleted file mode 100644
index 9c415ba3..00000000
Binary files a/content/en/docs/2.5/release-notes/edge-stack-1.13.7-memory.png and /dev/null differ
diff --git a/content/en/docs/2.5/release-notes/edge-stack-1.13.7-tcpmapping-consul.png b/content/en/docs/2.5/release-notes/edge-stack-1.13.7-tcpmapping-consul.png
deleted file mode 100644
index c455a47f..00000000
Binary files a/content/en/docs/2.5/release-notes/edge-stack-1.13.7-tcpmapping-consul.png and /dev/null differ
diff --git a/content/en/docs/2.5/release-notes/edge-stack-1.13.8-cloud-bugfix.png b/content/en/docs/2.5/release-notes/edge-stack-1.13.8-cloud-bugfix.png
deleted file mode 100644
index 6beaf653..00000000
Binary files a/content/en/docs/2.5/release-notes/edge-stack-1.13.8-cloud-bugfix.png and /dev/null differ
diff --git a/content/en/docs/2.5/release-notes/edge-stack-2.0.0-host_crd.png b/content/en/docs/2.5/release-notes/edge-stack-2.0.0-host_crd.png
deleted file mode 100644
index c77ef528..00000000
Binary files a/content/en/docs/2.5/release-notes/edge-stack-2.0.0-host_crd.png and /dev/null differ
diff --git a/content/en/docs/2.5/release-notes/edge-stack-2.0.0-ingressstatus.png b/content/en/docs/2.5/release-notes/edge-stack-2.0.0-ingressstatus.png
deleted file mode 100644
index 6856d308..00000000
Binary files a/content/en/docs/2.5/release-notes/edge-stack-2.0.0-ingressstatus.png and /dev/null differ
diff --git a/content/en/docs/2.5/release-notes/edge-stack-2.0.0-insecure_action_hosts.png b/content/en/docs/2.5/release-notes/edge-stack-2.0.0-insecure_action_hosts.png
deleted file mode 100644
index 79c20bad..00000000
Binary files a/content/en/docs/2.5/release-notes/edge-stack-2.0.0-insecure_action_hosts.png and /dev/null differ
diff --git a/content/en/docs/2.5/release-notes/edge-stack-2.0.0-listener.png b/content/en/docs/2.5/release-notes/edge-stack-2.0.0-listener.png
deleted file mode 100644
index ea45a02b..00000000
Binary files a/content/en/docs/2.5/release-notes/edge-stack-2.0.0-listener.png and /dev/null differ
diff --git a/content/en/docs/2.5/release-notes/edge-stack-2.0.0-prune_routes.png b/content/en/docs/2.5/release-notes/edge-stack-2.0.0-prune_routes.png
deleted file mode 100644
index bc43229f..00000000
Binary files a/content/en/docs/2.5/release-notes/edge-stack-2.0.0-prune_routes.png and /dev/null differ
diff --git a/content/en/docs/2.5/release-notes/edge-stack-2.0.0-tlscontext.png b/content/en/docs/2.5/release-notes/edge-stack-2.0.0-tlscontext.png
deleted file mode 100644
index 68dbad80..00000000
Binary files a/content/en/docs/2.5/release-notes/edge-stack-2.0.0-tlscontext.png and /dev/null differ
diff --git a/content/en/docs/2.5/release-notes/edge-stack-2.0.0-v3alpha1.png b/content/en/docs/2.5/release-notes/edge-stack-2.0.0-v3alpha1.png
deleted file mode 100644
index c0ac3596..00000000
Binary files a/content/en/docs/2.5/release-notes/edge-stack-2.0.0-v3alpha1.png and /dev/null differ
diff --git a/content/en/docs/2.5/release-notes/emissary-1.13.10-cors-origin.png b/content/en/docs/2.5/release-notes/emissary-1.13.10-cors-origin.png
deleted file mode 100644
index b7538e5f..00000000
Binary files a/content/en/docs/2.5/release-notes/emissary-1.13.10-cors-origin.png and /dev/null differ
diff --git a/content/en/docs/2.5/release-notes/emissary-ga.png b/content/en/docs/2.5/release-notes/emissary-ga.png
deleted file mode 100644
index 062f043a..00000000
Binary files a/content/en/docs/2.5/release-notes/emissary-ga.png and /dev/null differ
diff --git a/content/en/docs/2.5/release-notes/tada.png b/content/en/docs/2.5/release-notes/tada.png
deleted file mode 100644
index c8832e8e..00000000
Binary files a/content/en/docs/2.5/release-notes/tada.png and /dev/null differ
diff --git a/content/en/docs/2.5/release-notes/v2.0.4-k8s-1.22.png b/content/en/docs/2.5/release-notes/v2.0.4-k8s-1.22.png
deleted file mode 100644
index ed9b0415..00000000
Binary files a/content/en/docs/2.5/release-notes/v2.0.4-k8s-1.22.png and /dev/null differ
diff --git a/content/en/docs/2.5/release-notes/v2.0.4-l7depth.png b/content/en/docs/2.5/release-notes/v2.0.4-l7depth.png
deleted file mode 100644
index 9314324c..00000000
Binary files a/content/en/docs/2.5/release-notes/v2.0.4-l7depth.png and /dev/null differ
diff --git a/content/en/docs/2.5/release-notes/v2.0.4-mapping-dns-type.png b/content/en/docs/2.5/release-notes/v2.0.4-mapping-dns-type.png
deleted file mode 100644
index 7770c77d..00000000
Binary files a/content/en/docs/2.5/release-notes/v2.0.4-mapping-dns-type.png and /dev/null differ
diff --git a/content/en/docs/2.5/release-notes/v2.0.4-v3alpha1.png b/content/en/docs/2.5/release-notes/v2.0.4-v3alpha1.png
deleted file mode 100644
index 9c50b8fb..00000000
Binary files a/content/en/docs/2.5/release-notes/v2.0.4-v3alpha1.png and /dev/null differ
diff --git a/content/en/docs/2.5/release-notes/v2.0.4-version.png b/content/en/docs/2.5/release-notes/v2.0.4-version.png
deleted file mode 100644
index 9481b7db..00000000
Binary files a/content/en/docs/2.5/release-notes/v2.0.4-version.png and /dev/null differ
diff --git a/content/en/docs/2.5/release-notes/v2.0.5-auth-circuit-breaker.png b/content/en/docs/2.5/release-notes/v2.0.5-auth-circuit-breaker.png
deleted file mode 100644
index cac8cf7b..00000000
Binary files a/content/en/docs/2.5/release-notes/v2.0.5-auth-circuit-breaker.png and /dev/null differ
diff --git a/content/en/docs/2.5/release-notes/v2.0.5-mappingselector.png b/content/en/docs/2.5/release-notes/v2.0.5-mappingselector.png
deleted file mode 100644
index 31942ede..00000000
Binary files a/content/en/docs/2.5/release-notes/v2.0.5-mappingselector.png and /dev/null differ
diff --git a/content/en/docs/2.5/release-notes/v2.1.0-canary.png b/content/en/docs/2.5/release-notes/v2.1.0-canary.png
deleted file mode 100644
index 39d3bbbf..00000000
Binary files a/content/en/docs/2.5/release-notes/v2.1.0-canary.png and /dev/null differ
diff --git a/content/en/docs/2.5/release-notes/v2.1.0-gzip-enabled.png b/content/en/docs/2.5/release-notes/v2.1.0-gzip-enabled.png
deleted file mode 100644
index 061fcbc9..00000000
Binary files a/content/en/docs/2.5/release-notes/v2.1.0-gzip-enabled.png and /dev/null differ
diff --git a/content/en/docs/2.5/release-notes/v2.1.0-smoother-migration.png b/content/en/docs/2.5/release-notes/v2.1.0-smoother-migration.png
deleted file mode 100644
index ebd77497..00000000
Binary files a/content/en/docs/2.5/release-notes/v2.1.0-smoother-migration.png and /dev/null differ
diff --git a/content/en/docs/2.5/release-notes/v2.1.2-annotations.png b/content/en/docs/2.5/release-notes/v2.1.2-annotations.png
deleted file mode 100644
index b5498c3c..00000000
Binary files a/content/en/docs/2.5/release-notes/v2.1.2-annotations.png and /dev/null differ
diff --git a/content/en/docs/2.5/release-notes/v2.1.2-host-mapping-matching.png b/content/en/docs/2.5/release-notes/v2.1.2-host-mapping-matching.png
deleted file mode 100644
index 1cfba5ed..00000000
Binary files a/content/en/docs/2.5/release-notes/v2.1.2-host-mapping-matching.png and /dev/null differ
diff --git a/content/en/docs/2.5/release-notes/v2.1.2-mapping-cors.png b/content/en/docs/2.5/release-notes/v2.1.2-mapping-cors.png
deleted file mode 100644
index f76ea01c..00000000
Binary files a/content/en/docs/2.5/release-notes/v2.1.2-mapping-cors.png and /dev/null differ
diff --git a/content/en/docs/2.5/release-notes/v2.1.2-mapping-less-weighted.png b/content/en/docs/2.5/release-notes/v2.1.2-mapping-less-weighted.png
deleted file mode 100644
index 7e299062..00000000
Binary files a/content/en/docs/2.5/release-notes/v2.1.2-mapping-less-weighted.png and /dev/null differ
diff --git a/content/en/docs/2.5/release-notes/v2.1.2-mapping-no-rewrite.png b/content/en/docs/2.5/release-notes/v2.1.2-mapping-no-rewrite.png
deleted file mode 100644
index 5d3d5a29..00000000
Binary files a/content/en/docs/2.5/release-notes/v2.1.2-mapping-no-rewrite.png and /dev/null differ
diff --git a/content/en/docs/2.5/release-notes/v2.2.0-cloud.png b/content/en/docs/2.5/release-notes/v2.2.0-cloud.png
deleted file mode 100644
index 5923fcb4..00000000
Binary files a/content/en/docs/2.5/release-notes/v2.2.0-cloud.png and /dev/null differ
diff --git a/content/en/docs/2.5/release-notes/v2.2.0-percent-escape.png b/content/en/docs/2.5/release-notes/v2.2.0-percent-escape.png
deleted file mode 100644
index df4d81b9..00000000
Binary files a/content/en/docs/2.5/release-notes/v2.2.0-percent-escape.png and /dev/null differ
diff --git a/content/en/docs/2.5/release-notes/v2.2.0-tls-cert-validation.png b/content/en/docs/2.5/release-notes/v2.2.0-tls-cert-validation.png
deleted file mode 100644
index f8635b5a..00000000
Binary files a/content/en/docs/2.5/release-notes/v2.2.0-tls-cert-validation.png and /dev/null differ
diff --git a/content/en/docs/2.5/releaseNotes.yml b/content/en/docs/2.5/releaseNotes.yml
deleted file mode 100644
index a0d0c3ca..00000000
--- a/content/en/docs/2.5/releaseNotes.yml
+++ /dev/null
@@ -1,1143 +0,0 @@
-# -*- fill-column: 100 -*-
-
-# This file should be placed in the folder for the version of the
-# product that's meant to be documented. A `/release-notes` page will
-# be automatically generated and populated at build time.
-#
-# Note that an entry needs to be added to the `doc-links.yml` file in
-# order to surface the release notes in the table of contents.
-#
-# The YAML in this file should contain:
-#
-# changelog: An (optional) URL to the CHANGELOG for the product.
-# items: An array of releases with the following attributes:
-# - version: The (optional) version number of the release, if applicable.
-# - date: The date of the release in the format YYYY-MM-DD.
-# - notes: An array of noteworthy changes included in the release, each having the following attributes:
-# - type: The type of change, one of `bugfix`, `feature`, `security` or `change`.
-# - title: A short title of the noteworthy change.
-# - body: >-
-# Two or three sentences describing the change and why it
-# is noteworthy. This is HTML, not plain text or
-# markdown. It is handy to use YAML's ">-" feature to
-# allow line-wrapping.
-# - image: >-
-# The URL of an image that visually represents the
-# noteworthy change. This path is relative to the
-# `release-notes` directory; if this file is
-# `FOO/releaseNotes.yml`, then the image paths are
-# relative to `FOO/release-notes/`.
-# - docs: The path to the documentation page where additional information can be found.
-# - href: A path from the root to a resource on the getambassador website, takes precedence over a docs link.
-
-changelog: https://github.com/emissary-ingress/emissary/blob/$branch$/CHANGELOG.md
-items:
- - version: 2.5.1
- date: '2022-12-08'
- notes:
- - title: Update Golang to 1.19.4
- type: security
- body: >-
- Updated Golang to latest 1.19.4 patch release which contained two CVEs: CVE-2022-41720, CVE-2022-41717.
-
- CVE-2022-41720 only affects Windows and $productName$ only ships on Linux. CVE-2022-41717 affects HTTP/2 servers that are exposed to external clients. $productName$ does not expose any of these golang servers to external clients directly.
-
- - version: 2.5.0
- date: '2022-11-03'
- notes:
- - title: Diagnostics stats properly handles parsing envoy metrics with colons
- type: bugfix
- body: >-
- If a Host
or TLSContext
contained a hostname with a :
then when using the
- diagnostics endpoints ambassador/v0/diagd
then an error would be thrown due to the parsing logic not
- being able to handle the extra colon. This has been fixed and $productName$ will not throw an error when parsing
- envoy metrics for the diagnostics user interface.
-
- - title: Bump Golang to 1.19.2
- type: security
- body: >-
- Bump Go from 1.17.12 to 1.19.2. This is to keep the Go version current.
-
- - version: 2.4.1
- date: '2022-10-10'
- notes:
- - title: Diagnostics stats properly handles parsing envoy metrics with colons
- type: bugfix
- body: >-
- If a Host
or TLSContext
contained a hostname with a :
then when using the diagnostics endpoints ambassador/v0/diagd
then an error would be thrown due to the parsing logic not being able to handle the extra colon. This has been fixed and $productName$ will not throw an error when parsing envoy metrics for the diagnostics user interface.
-
- - title: Backport fixes for handling synthetic auth services
- type: bugfix
- body: >-
- The synthetic AuthService didn't correctly handle AmbassadorID, which was fixed in version 3.1 of $productName$.The fix has been backported to make sure the AuthService is handled correctly during upgrades.
-
- - version: 2.4.0
- date: '2022-09-19'
- notes:
- - title: Add support for Host resources using secrets from different namespaces
- type: feature
- body: >-
- Previously the Host
resource could only use secrets that are in the namespace as the
- Host. The tlsSecret
field in the Host has a new subfield namespace
that will allow
- the use of secrets from different namespaces.
- docs: topics/running/tls/#bring-your-own-certificate
-
- - title: Add support for config change batch window before reconfiguring Envoy
- type: feature
- body: >-
- The AMBASSADOR_RECONFIG_MAX_DELAY
env var can be optionally set to batch changes for the specified
- non-negative window period in seconds before doing an Envoy reconfiguration. Default is "1" if not set.
-
- - title: Allow bypassing of EDS for manual endpoint insertion
- type: feature
- body: >-
- Set AMBASSADOR_EDS_BYPASS
to true
to bypass EDS handling of endpoints and have endpoints be
- inserted to clusters manually. This can help resolve with 503 UH
caused by certification rotation relating to
- a delay between EDS + CDS. The default is false
.
- docs: topics/running/environment/#ambassador_eds_bypass
-
- - title: Properly populate alt_state_name for Tracing, Auth and RateLimit Services
- type: bugfix
- body: >-
- Previously, setting the stats_name
for the TracingService
, RateLimitService
- or the AuthService
would have no affect because it was not being properly passed to the Envoy cluster
- config. This has been fixed and the alt_stats_name
field in the cluster config is now set correctly.
- (Thanks to Paul!)
-
- - title: TCPMappings use correct SNI configuration
- type: bugfix
- body: >-
- $productName$ 2.0.0 introduced a bug where a TCPMapping
that uses SNI,
- instead of using the hostname glob in the TCPMapping
, uses the hostname glob
- in the Host
that the TLS termination configuration comes from.
-
- - title: TCPMappings configure TLS termination without a Host resource
- type: bugfix
- body: >-
- $productName$ 2.0.0 introduced a bug where a TCPMapping
that terminates TLS
- must have a corresponding Host
that it can take the TLS configuration from.
- This was semi-intentional, but didn't make much sense. You can now use a
- TLSContext
without a Host
as in $productName$ 1.y releases, or a
- Host
with or without a TLSContext
as in prior 2.y releases.
-
- - title: TCPMappings and HTTP Hosts can coexist on Listeners that terminate TLS
- type: bugfix
- body: >-
- Prior releases of $productName$ had the arbitrary limitation that a
- TCPMapping
cannot be used on the same port that HTTP is served on, even if
- TLS+SNI would make this possible. $productName$ now allows TCPMappings
to be
- used on the same Listener
port as HTTP Hosts
, as long as that
- Listener
terminates TLS.
-
- - version: 2.3.2
- date: '2022-08-01'
- notes:
- - title: Fix regression in the agent for the metrics transfer.
- type: bugfix
- body: >-
- A regression was introduced in 2.3.0 causing the agent to miss some of the metrics coming from
- Emissary-ingress before sending them to Ambassador cloud. This issue has been resolved to ensure
- that all the nodes composing the Emissary-ingress cluster are reporting properly.
-
- - title: Update Golang to 1.17.12
- type: security
- body: >-
- Updated Golang to 1.17.12 to address the CVEs: CVE-2022-23806, CVE-2022-28327, CVE-2022-24675,
- CVE-2022-24921, CVE-2022-23772.
-
- - title: Update Curl to 7.80.0-r2
- type: security
- body: >-
- Updated Curl to 7.80.0-r2 to address the CVEs: CVE-2022-32207, CVE-2022-27782, CVE-2022-27781,
- CVE-2022-27780.
-
- - title: Update openSSL-dev to 1.1.1q-r0
- type: security
- body: >-
- Updated openSSL-dev to 1.1.1q-r0 to address CVE-2022-2097.
-
- - title: Update ncurses to 1.1.1q-r0
- type: security
- body: >-
- Updated ncurses to 1.1.1q-r0 to address CVE-2022-29458
-
- - version: 2.3.1
- date: '2022-06-10'
- notes:
- - title: Fix regression in tracing service config
- type: bugfix
- body: >-
- A regression was introduced in 2.3.0 that leaked zipkin default config fields into the configuration
- for the other drivers (lightstep, etc...). This caused $productName$ to crash on startup. This issue has been resolved
- to ensure that the defaults are only applied when driver is zipkin
- docs: https://github.com/emissary-ingress/emissary/issues/4267
-
- - title: Envoy security updates
- type: security
- body: >-
- We have backported patches from the Envoy 1.19.5 security update to $productName$'s
- 1.17-based Envoy, addressing CVE-2022-29224 and CVE-2022-29225. $productName$ is not
- affected by CVE-2022-29226, CVE-2022-29227, or CVE-2022-29228; as it does not support internal
- redirects, and does not use Envoy's built-in OAuth2 filter.
- docs: https://groups.google.com/g/envoy-announce/c/8nP3Kn4jV7k
-
- - version: 2.3.0
- date: '2022-06-06'
- notes:
- - title: Remove unused packages
- type: security
- body: >-
- Completely remove gdbm
, pip
, smtplib
, and sqlite
packages, as they are unused.
-
- - title: CORS now happens before auth
- type: bugfix
- body: >-
- When CORS is specified (either in a Mapping
or in the Ambassador
- Module
), CORS processing will happen before authentication. This corrects a
- problem where XHR to authenticated endpoints would fail.
-
- - title: Correctly handle caching of Mappings with the same name in different namespaces
- type: bugfix
- body: >-
- In 2.x releases of $productName$ when there are multiple Mapping
s that have the same
- metadata.name
across multiple namespaces, their old config would not properly be removed
- from the cache when their config was updated. This resulted in an inability to update configuration
- for groups of Mapping
s that share the same name until the $productName$ pods restarted.
-
- - title: Fix support for Zipkin API-v1 with Envoy xDS-v3
- type: bugfix
- body: >-
- It is now possible for a TracingService
to specify
- collector_endpoint_version: HTTP_JSON_V1
when using xDS v3 to configure Envoy
- (which has been the default since $productName$ 1.14.0). The HTTP_JSON_V1
- value configures Envoy to speak to Zipkin using Zipkin's old API-v1, while the
- HTTP_JSON
value configures Envoy to speak to Zipkin using Zipkin's new
- API-v2. In previous versions of $productName$ it was only possible to use
- HTTP_JSON_V1
when explicitly setting the
- AMBASSADOR_ENVOY_API_VERSION=V2
environment variable to force use of xDS v2
- to configure Envoy.
- docs: topics/running/services/tracing-service/
-
- - title: Allow setting propagation modes for Lightstep tracing
- type: feature
- body: >-
- It is now possible to set propagation_modes
in the
- TracingService
config when using lightstep as the driver.
- (Thanks to Paul!)
- docs: topics/running/services/tracing-service/
- github:
- - title: "#4179"
- link: https://github.com/emissary-ingress/emissary/pull/4179
-
- - title: Added Support for Certificate Revocation Lists
- type: feature
- body: >-
- $productName$ now supports Envoy's Certificate Revocation lists.
- This allows users to specify a list of certificates that $productName$ should reject even if the certificate itself is otherwise valid.
- docs: topics/running/tls
-
- - title: Added support for the LogService v3 transport protocol
- type: feature
- body: >-
- Previously, a LogService
would always have $productName$ communicate with the
- external log service using the envoy.service.accesslog.v2.AccessLogService
- API. It is now possible for the LogService
to specify
- protocol_version: v3
to use the newer
- envoy.service.accesslog.v3.AccessLogService
API instead. This functionality
- is not available if you set the AMBASSADOR_ENVOY_API_VERSION=V2
environment
- variable.
- docs: topics/running/services/log-service/
-
- - title: Deprecated v2 transport protocol for AuthServices
- type: change
- body: >-
- A future release of $productName$ will remove support for the now deprecated v2 transport protocol in AuthServices. Instructions for migrating existing AuthServices from v2 to v3 can be found on the AuthService page. This change only impacts gRPC AuthServices. HTTP AuthServices are unaffected by this change.
- docs: topics/running/services/auth-service/
-
- edgeStackNotes:
- - title: Improved performance processing OAuth2 Filters
- type: change
- body: >-
- When each OAuth2 Filter that references a Kubernetes secret is loaded, $AESproductName$ previously needed to communicate with the API server to request and validate that secret before loading the next Filter. To improve performance, $AESproductName$ will now load and validate all secrets required by OAuth2 Filters at once prior to loading the filters.
-
- - title: Added Support for transport protocol v3 in External Filters
- type: feature
- body: >-
- External Filters can now make use of the v3 transport protocol. In addtion to the support for the v3 transport protocol, the default AuthService
installed with $AESproductName$ will now only operate with transport protocol v3. In order to support existing External Filters using v2, $AESproductName$ will automatically translate
- v2 to the new default of v3. Any External Filters will be assumed to be using transport protocol v2 and will use the automatic conversion to v3 unless the new protocol_version
field on the External Filter is explicitly set to v3
.
-
- - title: Deprecated v2 transport protocol for External Filters
- type: change
- body: >-
- A future release of $AESproductName$ will remove support for the now deprecated v2 transport protocol in External Filters. Migrating Existing External Filters from v2 to v3 is simple and and example can be found on the External Filter page. This change only impacts gRPC External Filters. HTTP External Filters are unaffected by this change.
-
- - version: 2.2.2
- date: '2022-02-25'
- notes:
- - title: TLS Secret validation is now opt-in
- type: change
- body: >-
- You may now choose to enable TLS Secret validation by setting the
- AMBASSADOR_FORCE_SECRET_VALIDATION=true
environment variable. The default configuration does not
- enforce secret validation.
- docs: topics/running/tls#certificates-and-secrets
-
- - title: Correctly validate EC (Elliptic Curve) Private Keys
- type: bugfix
- body: >-
- Kubernetes Secrets that should contain an EC (Elliptic Curve) TLS Private Key are now properly validated.
- github:
- - title: '#4134'
- link: https://github.com/emissary-ingress/emissary/issues/4134
- docs: topics/running/tls#certificates-and-secrets
-
- - version: 2.2.1
- date: '2022-02-22'
- notes:
- - title: Envoy V2 API deprecation
- type: change
- body: >-
- Support for the Envoy V2 API is deprecated as of $productName$ v2.1, and will be removed in $productName$
- v3.0. The AMBASSADOR_ENVOY_API_VERSION
environment variable will be removed at the same
- time. Only the Envoy V3 API will be supported (this has been the default since $productName$ v1.14.0).
-
- - title: Envoy security updates
- type: security
- body: >-
- Upgraded Envoy to address security vulnerabilities CVE-2021-43824, CVE-2021-43825, CVE-2021-43826,
- CVE-2022-21654, and CVE-2022-21655.
- docs: https://groups.google.com/g/envoy-announce/c/bIUgEDKHl4g
- - title: Correctly support canceling rollouts
- type: bugfix
- body: >-
- The Ambassador Agent now correctly supports requests to cancel a rollout.
- docs: ../../argo/latest/howtos/manage-rollouts-using-cloud
-
- - version: 2.2.0
- date: '2022-02-10'
- notes:
- - title: Envoy V2 API deprecation
- type: change
- body: >-
- Support for the Envoy V2 API is deprecated as of $productName$ v2.1, and will be removed in $productName$
- v3.0. The AMBASSADOR_ENVOY_API_VERSION
environment variable will be removed at the same
- time. Only the Envoy V3 API will be supported (this has been the default since $productName$ v1.14.0).
-
- - title: Emissary-ingress will watch for Cloud Connect Tokens
- type: change
- body: >-
- $productName$ will now watch for ConfigMap or Secret resources specified by the
- AGENT_CONFIG_RESOURCE_NAME
environment variable in order to allow all
- components (and not only the Ambassador Agent) to authenticate requests to
- Ambassador Cloud.
- image: ./v2.2.0-cloud.png
-
- - title: Update Alpine and libraries
- type: security
- body: >-
- $productName$ has updated Alpine to 3.15, and Python and Go dependencies
- to their latest compatible versions, to incorporate numerous security patches.
-
- - title: Support a log-level metric
- type: feature
- body: >-
- $productName$ now supports the metric ambassador_log_level{label="debug"}
- which will be set to 1 if debug logging is enabled for the running Emissary
- instance, or to 0 if not. This can help to be sure that a running production
- instance was not actually left doing debugging logging, for example.
- (Thanks to Fabrice!)
- github:
- - title: "#3906"
- link: https://github.com/emissary-ingress/emissary/issues/3906
- docs: topics/running/statistics/8877-metrics/
-
- - title: Envoy configuration % escaping
- type: feature
- body: >-
- $productName$ is now leveraging a new Envoy Proxy patch that allows Envoy to accept escaped
- '%' characters in its configuration. This means that error_response_overrides and other
- custom user content can now contain '%' symbols escaped as '%%'.
- docs: topics/running/custom-error-responses
- github:
- - title: "DW Envoy: 74"
- link: https://github.com/datawire/envoy/pull/74
- - title: "Upstream Envoy: 19383"
- link: https://github.com/envoyproxy/envoy/pull/19383
- image: ./v2.2.0-percent-escape.png
-
- - title: Stream metrics from Envoy to Ambassador Cloud
- type: feature
- body: >-
- Support for streaming Envoy metrics about the clusters to Ambassador Cloud.
- github:
- - title: "#4053"
- link: https://github.com/emissary-ingress/emissary/pull/4053
- docs: https://github.com/emissary-ingress/emissary/pull/4053
-
- - title: Support received commands to pause, continue and abort a Rollout via Agent directives
- type: feature
- body: >-
- The Ambassador agent now receives commands to manipulate Rollouts (pause, continue, and
- abort are currently supported) via directives and executes them in the cluster. A report
- is sent to Ambassador Cloud including the command ID, whether it ran successfully, and
- an error message in case there was any.
- github:
- - title: "#4040"
- link: https://github.com/emissary-ingress/emissary/pull/4040
- docs: https://github.com/emissary-ingress/emissary/pull/4040
-
- - title: Validate certificates in TLS Secrets
- type: bugfix
- body: >-
- Kubernetes Secrets that should contain TLS certificates are now validated before being
- accepted for configuration. A Secret that contains an invalid TLS certificate will be logged
- as an invalid resource.
- github:
- - title: "#3821"
- link: https://github.com/emissary-ingress/emissary/issues/3821
- docs: ../topics/running/tls
- image: ./v2.2.0-tls-cert-validation.png
-
- edgeStackNotes:
- - title: Devportal support for using API server definitions from OpenAPI docs
- type: feature
- body: >-
- You can now set preserve_servers
in Ambassador Edge Stack's
- DevPortal
resource to configure the DevPortal to use server definitions from
- the OpenAPI document when displaying connection information for services in the DevPortal.
-
- - version: 2.1.2
- prevVersion: 2.1.0
- date: '2022-01-25'
- notes:
- - title: Envoy V2 API deprecation
- type: change
- body: >-
- Support for the Envoy V2 API is deprecated as of $productName$ v2.1, and will be removed in $productName$
- v3.0. The AMBASSADOR_ENVOY_API_VERSION
environment variable will be removed at the same
- time. Only the Envoy V3 API will be supported (this has been the default since $productName$ v1.14.0).
-
- - title: Docker BuildKit always used for builds
- type: change
- body: >-
- Docker BuildKit is enabled for all Emissary builds. Additionally, the Go
- build cache is fully enabled when building images, speeding up repeated builds.
- docs: https://github.com/moby/buildkit/blob/master/frontend/dockerfile/docs/syntax.md
-
- - title: Fix support for for v2 Mappings with CORS
- type: bugfix
- body: >-
- Emissary-ingress 2.1.0 generated invalid Envoy configuration for
- getambassador.io/v2
Mappings
that set
- spec.cors.origins
to a string rather than a list of strings; this has been
- fixed, and these Mappings
should once again function correctly.
- docs: topics/using/cors/#the-cors-attribute
- image: ./v2.1.2-mapping-cors.png
-
- - title: Correctly handle canary Mapping weights when reconfiguring
- type: bugfix
- body: >-
- Changes to the weight
of Mapping
in a canary group
- will now always be correctly managed during reconfiguration; such changes could
- have been missed in earlier releases.
- docs: topics/using/canary/#the-weight-attribute
-
- - title: Correctly handle solitary Mappings with explicit weights
- type: bugfix
- body: >-
- A Mapping
that is not part of a canary group, but that has a
- weight
less than 100, will be correctly configured to receive all
- traffic as if the weight
were 100.
- docs: topics/using/canary/#the-weight-attribute
- image: ./v2.1.2-mapping-less-weighted.png
-
- - title: Correctly handle empty rewrite in a Mapping
- type: bugfix
- body: >-
- Using rewrite: ""
in a Mapping
is correctly handled
- to mean "do not rewrite the path at all".
- docs: topics/using/rewrites
- image: ./v2.1.2-mapping-no-rewrite.png
-
- - title: Correctly use Mappings with host redirects
- type: bugfix
- body: >-
- Any Mapping
that uses the host_redirect
field is now properly discovered and used. Thanks
- to Gabriel Féron for contributing this bugfix!
- github:
- - title: "#3709"
- link: https://github.com/emissary-ingress/emissary/issues/3709
- docs: https://github.com/emissary-ingress/emissary/issues/3709
-
- - title: Correctly handle DNS wildcards when associating Hosts and Mappings
- type: bugfix
- body: >-
- Mapping
s with DNS wildcard hostname
will now be correctly
- matched with Host
s. Previously, the case where both the Host
- and the Mapping
use DNS wildcards for their hostnames could sometimes
- not correctly match when they should have.
- docs: howtos/configure-communications/
- image: ./v2.1.2-host-mapping-matching.png
-
- - title: Fix overriding global settings for adding or removing headers
- type: bugfix
- body: >-
- If the ambassador
Module
sets a global default for
- add_request_headers
, add_response_headers
,
- remove_request_headers
, or remove_response_headers
, it is often
- desirable to be able to turn off that setting locally for a specific Mapping
.
- For several releases this has not been possible for Mappings
that are native
- Kubernetes resources (as opposed to annotations), as an empty value ("mask the global
- default") was erroneously considered to be equivalent to unset ("inherit the global
- default"). This is now fixed.
- docs: topics/using/defaults/
-
- - title: Fix empty error_response_override bodies
- type: bugfix
- body: >-
- It is now possible to set a Mapping
- spec.error_response_overrides
body.text_format
to an empty
- string or body.json_format
to an empty dict. Previously, this was possible
- for annotations but not for native Kubernetes resources.
- docs: topics/running/custom-error-responses/
-
- - title: Annotation conversion and validation
- type: bugfix
- body: >-
- Resources that exist as getambassador.io/config
annotations rather than as
- native Kubernetes resources are now validated and internally converted to v3alpha1 and,
- the same as native Kubernetes resources.
- image: ./v2.1.2-annotations.png
-
- - title: Validation error reporting
- type: bugfix
- body: >-
- Resource validation errors are now reported more consistently; it was the case that in
- some situations a validation error would not be reported.
-
- - version: 2.1.1
- date: 'N/A'
- notes:
- - title: Never issued
- type: change
- isHeadline: true
- body: >-
- Emissary-ingress 2.1.1 was not issued; Ambassador Edge Stack 2.1.1 uses
- Emissary-ingress 2.1.0.
-
- - version: 2.1.0
- date: '2021-12-16'
- notes:
- - title: Not recommended; upgrade to 2.1.2 instead
- type: change
- isHeadline: true
- body: >-
- Emissary-ingress 2.1.0 is not recommended; upgrade to 2.1.2 instead.
-
- - title: Envoy V2 API deprecation
- type: change
- body: >-
- Support for the Envoy V2 API is deprecated as of $productName$ v2.1, and will be removed in $productName$
- v3.0. The AMBASSADOR_ENVOY_API_VERSION
environment variable will be removed at the same
- time. Only the Envoy V3 API will be supported (this has been the default since $productName$ v1.14.0).
-
- - title: Smoother migrations with support for getambassador.io/v2 CRDs
- type: feature
- body: >-
- $productName$ supports getambassador.io/v2
CRDs, to simplify migration from $productName$
- 1.X. Note: it is important to read the migration
- documentation before starting migration.
- docs: topics/install/migration-matrix
- image: ./v2.1.0-smoother-migration.png
-
- - title: Correctly handle all changing canary configurations
- type: bugfix
- body: >-
- The incremental reconfiguration cache could miss some updates when multiple
- Mapping
s had the same prefix
("canary"ing multiple
- Mapping
s together). This has been corrected, so that all such
- updates correctly take effect.
- github:
- - title: "#3945"
- link: https://github.com/emissary-ingress/emissary/issues/3945
- docs: https://github.com/emissary-ingress/emissary/issues/3945
- image: ./v2.1.0-canary.png
-
- - title: Secrets used for ACME private keys will not log errors
- type: bugfix
- body: >-
- When using Kubernetes Secrets to store ACME private keys (as the Edge Stack
- ACME client does), an error would always be logged about the Secret not being
- present, even though it was present, and everything was working correctly.
- This error is no longer logged.
-
- - title: When using gzip, upstreams will no longer receive encoded data
- type: bugfix
- body: >-
- When using gzip compression, upstream services will no longer receive compressed
- data. This bug was introduced in 1.14.0. The fix restores the default behavior of
- not sending compressed data to upstream services.
- github:
- - title: "#3818"
- link: https://github.com/emissary-ingress/emissary/issues/3818
- docs: https://github.com/emissary-ingress/emissary/issues/3818
- image: ./v2.1.0-gzip-enabled.png
-
- - title: Update to busybox 1.34.1
- type: security
- body: >-
- Update to busybox 1.34.1 to resolve CVE-2021-28831, CVE-2021-42378,
- CVE-2021-42379, CVE-2021-42380, CVE-2021-42381, CVE-2021-42382, CVE-2021-42383,
- CVE-2021-42384, CVE-2021-42385, and CVE-2021-42386.
-
- - title: Update Python dependencies
- type: security
- body: >-
- Update Python dependencies to resolve CVE-2020-28493 (jinja2), CVE-2021-28363
- (urllib3), and CVE-2021-33503 (urllib3).
-
- - title: Remove test-only code from the built image
- type: security
- body: >-
- Previous built images included some Python packages used only for test. These
- have now been removed, resolving CVE-2020-29651.
-
- - version: 2.0.5
- date: '2021-11-08'
- notes:
- - title: AuthService circuit breakers
- type: feature
- body: >-
- It is now possible to set the circuit_breakers
for AuthServices
,
- exactly the same as for Mappings
and TCPMappings
. This makes it
- possible to configure your AuthService
to be able to handle more than 1024
- concurrent requests.
- docs: topics/running/services/auth-service/
- image: ./v2.0.5-auth-circuit-breaker.png
-
- - title: Improved validity checking for error response overrides
- type: bugfix
- body: >-
- Any token delimited by '%' is now validated agains a whitelist of valid
- Envoy command operators. Any mapping containing an error_response_overrides
- section with invalid command operators will be discarded.
- docs: topics/running/custom-error-responses
-
- - title: mappingSelector is now correctly supported in the Host CRD
- type: bugfix
- body: >-
- The Host
CRD now correctly supports the mappingSelector
- element, as documented. As a transition aid, selector
is a synonym for
- mappingSelector
; a future version of $productName$ will remove the
- selector
element.
- github:
- - title: "#3902"
- link: https://github.com/emissary-ingress/emissary/issues/3902
- docs: https://github.com/emissary-ingress/emissary/issues/3902
- image: ./v2.0.5-mappingselector.png
-
- - version: 2.0.4
- date: '2021-10-19'
- notes:
- - title: General availability!
- type: feature
- body: >-
- We're pleased to introduce $productName$ 2.0.4 for general availability! The
- 2.X family introduces a number of changes to allow $productName$ to more
- gracefully handle larger installations, reduce global configuration to better
- handle multitenant or multiorganizational installations, reduce memory footprint, and
- improve performance. We welcome feedback!! Join us on
- Slack and let us know what you think.
- isHeadline: true
- docs: about/changes-2.x
- image: ./emissary-ga.png
-
- - title: API version getambassador.io/v3alpha1
- type: change
- body: >-
- The x.getambassador.io/v3alpha1
API version has become the
- getambassador.io/v3alpha1
API version. The Ambassador-
- prefixes from x.getambassador.io/v3alpha1
resources have been
- removed for ease of migration. Note that getambassador.io/v3alpha1
- is the only supported API version for 2.0.4 — full support for
- getambassador.io/v2
will arrive soon in a later 2.X version.
- docs: about/changes-2.x
- image: ./v2.0.4-v3alpha1.png
-
- - title: Support for Kubernetes 1.22
- type: feature
- body: >-
- The getambassador.io/v3alpha1
API version and the published chart
- and manifests have been updated to support Kubernetes 1.22. Thanks to
- Mohit Sharma for contributions to
- this feature!
- docs: about/changes-2.x
- image: ./v2.0.4-k8s-1.22.png
-
- - title: Mappings support configuring strict or logical DNS
- type: feature
- body: >-
- You can now set dns_type
between strict_dns
and
- logical_dns
in a Mapping
to configure the Service
- Discovery Type.
- docs: topics/using/mappings/#dns-configuration-for-mappings
- image: ./v2.0.4-mapping-dns-type.png
-
- - title: Mappings support controlling DNS refresh with DNS TTL
- type: feature
- body: >-
- You can now set respect_dns_ttl
to true
to force the
- DNS refresh rate for a Mapping
to be set to the record's TTL
- obtained from DNS resolution.
- docs: topics/using/mappings/#dns-configuration-for-mappings
-
- - title: Support configuring upstream buffer sizes
- type: feature
- body: >-
- You can now set buffer_limit_bytes
in the ambassador
- Module
to to change the size of the upstream read and write buffers.
- The default is 1MiB.
- docs: topics/running/ambassador/#modify-default-buffer-size
-
- - title: Version number reported correctly
- type: bugfix
- body: >-
- The release now shows its actual released version number, rather than
- the internal development version number.
- github:
- - title: "#3854"
- link: https://github.com/emissary-ingress/emissary/issues/3854
- docs: https://github.com/emissary-ingress/emissary/issues/3854
- image: ./v2.0.4-version.png
-
- - title: Large configurations work correctly with Ambassador Cloud
- type: bugfix
- body: >-
- Large configurations no longer cause $productName$ to be unable
- to communicate with Ambassador Cloud.
- github:
- - title: "#3593"
- link: https://github.com/emissary-ingress/emissary/issues/3593
- docs: https://github.com/emissary-ingress/emissary/issues/3593
-
- - title: Listeners correctly support l7Depth
- type: bugfix
- body: >-
- The l7Depth
element of the Listener
CRD is
- properly supported.
- docs: topics/running/listener#l7depth
- image: ./v2.0.4-l7depth.png
-
- - version: 2.0.3-ea
- date: '2021-09-16'
- notes:
- - title: Developer Preview!
- body: We're pleased to introduce $productName$ 2.0.3 as a developer preview. The 2.X family introduces a number of changes to allow $productName$ to more gracefully handle larger installations, reduce global configuration to better handle multitenant or multiorganizational installations, reduce memory footprint, and improve performance. We welcome feedback!! Join us on Slack and let us know what you think.
- type: change
- isHeadline: true
- docs: about/changes-2.x
-
- - title: AES_LOG_LEVEL more widely effective
- body: The environment variable AES_LOG_LEVEL
now also sets the log level for the diagd
logger.
- type: feature
- docs: topics/running/running/
- github:
- - title: "#3686"
- link: https://github.com/emissary-ingress/emissary/issues/3686
- - title: "#3666"
- link: https://github.com/emissary-ingress/emissary/issues/3666
-
- - title: AmbassadorMapping supports setting the DNS type
- body: You can now set dns_type
in the AmbassadorMapping
to configure how Envoy will use the DNS for the service.
- type: feature
- docs: topics/using/mappings/#using-dns_type
-
- - title: Building Emissary no longer requires setting DOCKER_BUILDKIT
- body: It is no longer necessary to set DOCKER_BUILDKIT=0
when building Emissary. A future change will fully support BuildKit.
- type: bugfix
- docs: https://github.com/emissary-ingress/emissary/issues/3707
- github:
- - title: "#3707"
- link: https://github.com/emissary-ingress/emissary/issues/3707
-
- - version: 2.0.2-ea
- date: '2021-08-24'
- notes:
- - title: Developer Preview!
- body: We're pleased to introduce $productName$ 2.0.2 as a developer preview. The 2.X family introduces a number of changes to allow $productName$ to more gracefully handle larger installations, reduce global configuration to better handle multitenant or multiorganizational installations, reduce memory footprint, and improve performance. We welcome feedback!! Join us on Slack and let us know what you think.
- type: change
- isHeadline: true
- docs: about/changes-2.x
-
- - title: Envoy security updates
- type: bugfix
- body: "Upgraded envoy to 1.17.4 to address security vulnerabilities CVE-2021-32777, CVE-2021-32778, CVE-2021-32779, and CVE-2021-32781."
- docs: https://groups.google.com/g/envoy-announce/c/5xBpsEZZDfE?pli=1
-
- - title: Expose Envoy's allow_chunked_length HTTPProtocolOption
- type: feature
- body: "You can now set allow_chunked_length
in the Ambassador Module to configure the same value in Envoy."
- docs: topics/running/ambassador/#content-length-headers
-
- - title: Envoy-configuration snapshots saved
- type: change
- body: Envoy-configuration snapshots get saved (as ambex-#.json
) in /ambassador/snapshots
. The number of snapshots is controlled by the AMBASSADOR_AMBEX_SNAPSHOT_COUNT
environment variable; set it to 0 to disable. The default is 30.
- docs: topics/running/running/
-
- - version: 2.0.1-ea
- date: "2021-08-12"
- notes:
- - title: Developer Preview!
- body: We're pleased to introduce $productName$ 2.0.1 as a developer preview. The 2.X family introduces a number of changes to allow $productName$ to more gracefully handle larger installations, reduce global configuration to better handle multitenant or multiorganizational installations, reduce memory footprint, and improve performance. We welcome feedback!! Join us on Slack and let us know what you think.
- type: change
- isHeadline: true
- docs: about/changes-2.x
-
- - title: Improved Ambassador Cloud visibility
- type: feature
- body: Ambassador Agent reports sidecar process information and AmbassadorMapping
OpenAPI documentation to Ambassador Cloud to provide more visibility into services and clusters.
- docs: /docs/cloud/latest/service-catalog/quick-start/
-
- - title: Configurable per-AmbassadorListener statistics prefix
- body: The optional stats_prefix
element of the AmbassadorListener
CRD now determines the prefix of HTTP statistics emitted for a specific AmbassadorListener
.
- type: feature
- docs: topics/running/listener
-
- - title: Configurable statistics names
- body: The optional stats_name
element of AmbassadorMapping
, AmbassadorTCPMapping
, AuthService
, LogService
, RateLimitService
, and TracingService
now sets the name under which cluster statistics will be logged. The default is the service
, with non-alphanumeric characters replaced by underscores.
- type: feature
- docs: topics/running/statistics
-
- - title: Updated klog to reduce log noise
- type: bugfix
- body: We have updated to k8s.io/klog/v2
to track upstream and to quiet unnecessary log output.
- docs: https://github.com/emissary-ingress/emissary/issues/3603
-
- - title: Subsecond time resolution in logs
- type: change
- body: Logs now include subsecond time resolutions, rather than just seconds.
- docs: https://github.com/emissary-ingress/emissary/pull/3650
-
- - title: Configurable Envoy-configuration rate limiting
- type: change
- body: Set AMBASSADOR_AMBEX_NO_RATELIMIT
to true
to completely disable ratelimiting Envoy reconfiguration under memory pressure. This can help performance with the endpoint or Consul resolvers, but could make OOMkills more likely with large configurations. The default is false
, meaning that the rate limiter is active.
- docs: topics/concepts/rate-limiting-at-the-edge/
-
- - version: 2.0.0-ea
- date: "2021-06-24"
- notes:
- - title: Developer Preview!
- body: We're pleased to introduce $productName$ 2.0.0 as a developer preview. The 2.X family introduces a number of changes to allow $productName$ to more gracefully handle larger installations, reduce global configuration to better handle multitenant or multiorganizational installations, reduce memory footprint, and improve performance. We welcome feedback!! Join us on Slack and let us know what you think.
- type: change
- docs: about/changes-2.x
- isHeadline: true
-
- - title: Configuration API v3alpha1
- body: >-
- $productName$ 2.0.0 introduces API version x.getambassador.io/v3alpha1
for
- configuration changes that are not backwards compatible with the 1.X family. API versions
- getambassador.io/v0
, getambassador.io/v1
, and
- getambassador.io/v2
are deprecated. Further details are available in the Major Changes
- in 2.X document.
- type: feature
- docs: about/changes-2.x/#1-configuration-api-version-getambassadoriov3alpha1
- image: ./edge-stack-2.0.0-v3alpha1.png
-
- - title: The AmbassadorListener Resource
- body: The new AmbassadorListener
CRD defines where and how to listen for requests from the network, and which AmbassadorHost
definitions should be used to process those requests. Note that the AmbassadorListener
CRD is mandatory and consolidates all port configuration; see the AmbassadorListener
documentation for more details.
- type: feature
- docs: topics/running/listener
- image: ./edge-stack-2.0.0-listener.png
-
- - title: AmbassadorMapping hostname DNS glob support
- body: >-
- Where AmbassadorMapping
's host
field is either an exact match or (with host_regex
set) a regex,
- the new hostname
element is always a DNS glob. Use hostname
instead of host
for best results.
- docs: about/changes-2.x/#ambassadorhost-and-ambassadormapping-association
- type: feature
-
- - title: Memory usage improvements for installations with many AmbassadorHosts
- body: The behavior of the Ambassador module prune_unreachable_routes
field is now automatic, which should reduce Envoy memory requirements for installations with many AmbassadorHost
s
- docs: topics/running/ambassador/#prune-unreachable-routes
- image: ./edge-stack-2.0.0-prune_routes.png
- type: feature
-
- - title: Independent Host actions supported
- body: Each AmbassadorHost
can specify its requestPolicy.insecure.action
independently of any other AmbassadorHost
, allowing for HTTP routing as flexible as HTTPS routing.
- docs: topics/running/host-crd/#secure-and-insecure-requests
- github:
- - title: "#2888"
- link: https://github.com/datawire/ambassador/issues/2888
- image: ./edge-stack-2.0.0-insecure_action_hosts.png
- type: bugfix
-
- - title: Correctly set Ingress resource status in all cases
- body: $productName$ 2.0.0 fixes a regression in detecting the Ambassador Kubernetes service that could cause the wrong IP or hostname to be used in Ingress statuses -- thanks, Noah Fontes!
- docs: topics/running/ingress-controller
- type: bugfix
- image: ./edge-stack-2.0.0-ingressstatus.png
-
- - title: Stricter mTLS enforcement
- body: $productName$ 2.0.0 fixes a bug where mTLS could use the wrong configuration when SNI and the :authority
header didn't match
- type: bugfix
-
- - title: Port configuration outside AmbassadorListener has been moved to AmbassadorListener
- body: The TLSContext
redirect_cleartext_from
and AmbassadorHost
requestPolicy.insecure.additionalPort
elements are no longer supported. Use a AmbassadorListener
for this functionality instead.
- type: change
- docs: about/changes-2.x/#tlscontext-redirect_cleartext_from-and-host-insecureadditionalport
-
- - title: PROXY protocol configuration has been moved to AmbassadorListener
- body: The use_proxy_protocol
element of the Ambassador Module
is no longer supported, as it is now part of the AmbassadorListener
resource (and can be set per-AmbassadorListener
rather than globally).
- type: change
- docs: about/changes-2.x/#proxy-protocol-configuration
-
- - title: Stricter rules for AmbassadorHost/AmbassadorMapping association
- body: An AmbassadorMapping
will only be matched with an AmbassadorHost
if the AmbassadorMapping
's host
or the AmbassadorHost
's selector
(or both) are explicitly set, and match. This change can significantly improve $productName$'s memory footprint when many AmbassadorHost
s are involved. Further details are available in the Major Changes in 2.X document.
- docs: about/changes-2.x/#host-and-mapping-association
- type: change
-
- - title: AmbassadorHost or Ingress now required for TLS termination
- body: An AmbassadorHost
or Ingress
resource is now required when terminating TLS -- simply creating a TLSContext
is not sufficient. Further details are available in the AmbassadorHost
CRD documentation.
- docs: about/changes-2.x/#host-tlscontext-and-tls-termination
- type: change
- image: ./edge-stack-2.0.0-host_crd.png
-
- - title: Envoy V3 APIs
- body: By default, $productName$ will configure Envoy using the V3 Envoy API. This change is mostly transparent to users, but note that Envoy V3 does not support unsafe regular expressions or, e.g., Zipkin's V1 collector protocol. Further details are available in the Major Changes in 2.X document.
- type: change
- docs: about/changes-2.x/#envoy-v3-api-by-default
-
- - title: Module-based TLS no longer supported
- body: The tls
module and the tls
field in the Ambassador module are no longer supported. Please use TLSContext
resources instead.
- docs: about/changes-2.x/#tls-the-ambassador-module-and-the-tls-module
- image: ./edge-stack-2.0.0-tlscontext.png
- type: change
-
- - title: Higher performance while generating Envoy configuration now enabled by default
- body: The environment variable AMBASSADOR_FAST_RECONFIGURE
is now set by default, enabling the higher-performance implementation of the code that $productName$ uses to generate and validate Envoy configurations.
- docs: topics/running/scaling/#ambassador_fast_reconfigure-and-ambassador_legacy_mode-flags
- type: change
-
- - title: Service Preview no longer supported
- body: >-
- Service Preview and the AGENT_SERVICE
environment variable are no longer supported.
- The Telepresence product replaces this functionality.
- docs: https://www.getambassador.io/docs/telepresence/
- type: change
-
- - title: edgectl no longer supported
- body: The edgectl
CLI tool has been deprecated; please use the emissary-ingress
helm chart instead.
- docs: topics/install/helm/
- type: change
-
- - version: 1.14.2
- date: '2021-09-29'
- notes:
- - title: Mappings support controlling DNS refresh with DNS TTL
- type: feature
- body: >-
- You can now set respect_dns_ttl
in Ambassador Mappings. When true it
- configures that upstream's refresh rate to be set to resource record’s TTL
- docs: topics/using/mappings/#dns-configuration-for-mappings
-
- - title: Mappings support configuring strict or logical DNS
- type: feature
- body: >-
- You can now set dns_type
in Ambassador Mappings to use Envoy's
- logical_dns
resolution instead of the default strict_dns
.
- docs: topics/using/mappings/#dns-configuration-for-mappings
-
- - title: Support configuring upstream buffer size
- type: feature
- body: >-
- You can now set buffer_limit_bytes
in the ambassador
- Module
to to change the size of the upstream read and write buffers.
- The default is 1MiB.
- docs: topics/running/ambassador/#modify-default-buffer-size
-
- - version: 1.14.1
- date: '2021-08-24'
- notes:
- - title: Envoy security updates
- type: change
- body: >-
- Upgraded Envoy to 1.17.4 to address security vulnerabilities CVE-2021-32777,
- CVE-2021-32778, CVE-2021-32779, and CVE-2021-32781.
- docs: https://groups.google.com/g/envoy-announce/c/5xBpsEZZDfE
-
- - version: 1.14.0
- date: "2021-08-19"
- notes:
- - title: Envoy upgraded to 1.17.3!
- type: change
- body: >-
- Update from Envoy 1.15 to 1.17.3
- docs: https://www.envoyproxy.io/docs/envoy/latest/version_history/version_history
-
- - title: Expose Envoy's allow_chunked_length HTTPProtocolOption
- type: feature
- body: >-
- You can now set allow_chunked_length
in the Ambassador Module to configure
- the same value in Envoy.
- docs: topics/running/ambassador/#content-length-headers
-
- - title: Default Envoy API version is now V3
- type: change
- body: >-
- AMBASSADOR_ENVOY_API_VERSION
now defaults to V3
- docs: topics/running/running/#ambassador_envoy_api_version
-
- - title: Subsecond time resolution in logs
- type: change
- body: Logs now include subsecond time resolutions, rather than just seconds.
- docs: https://github.com/emissary-ingress/emissary/pull/3650
-
- - version: 1.13.10
- date: '2021-07-28'
- notes:
- - title: Fix for CORS origins configuration on the Mapping resource
- type: bugfix
- body: >-
- Fixed a regression when specifying a comma separated string for cors.origins
- on the Mapping
resource.
- ([#3609](https://github.com/emissary-ingress/emissary/issues/3609))
- docs: topics/using/cors
- image: ../images/emissary-1.13.10-cors-origin.png
-
- - title: New Envoy-configuration snapshots for debugging
- body: "Envoy-configuration snapshots get saved (as ambex-#.json
) in /ambassador/snapshots
. The number of snapshots is controlled by the AMBASSADOR_AMBEX_SNAPSHOT_COUNT
environment variable; set it to 0 to disable. The default is 30."
- type: change
- docs: topics/running/environment/
-
- - title: Optionally remove ratelimiting for Envoy reconfiguration
- body: >-
- Set AMBASSADOR_AMBEX_NO_RATELIMIT
to true
to completely disable
- ratelimiting Envoy reconfiguration under memory pressure. This can help performance with
- the endpoint or Consul resolvers, but could make OOMkills more likely with large
- configurations. The default is false
, meaning that the rate limiter is
- active.
- type: change
- docs: topics/running/environment/
-
- edgeStackNotes:
- - title: Mappings support configuring the DevPortal fetch timeout
- type: bugfix
- body: >-
- The Mapping
resource can now specify docs.timeout_ms
to set the
- timeout when the Dev Portal is fetching API specifications.
- docs: topics/using/dev-portal
- image: ../images/edge-stack-1.13.10-docs-timeout.png
-
- - title: Dev Portal will strip HTML tags when displaying results
- type: bugfix
- body: >-
- The Dev Portal will now strip HTML tags when displaying search results, showing just the
- actual content of the search result.
- docs: topics/using/dev-portal
-
- - title: Consul certificate rotation logs more information
- type: change
- body: >-
- Consul certificate-rotation logging now includes the fingerprints and validity timestamps
- of certificates being rotated.
- docs: howtos/consul/
- image: ../images/edge-stack-1.13.10-consul-cert-log.png
-
- - version: 1.13.9
- date: '2021-06-30'
- notes:
- - title: Fix for TCPMappings
- body: >-
- Configuring multiple TCPMappings with the same ports (but different hosts) no longer
- generates invalid Envoy configuration.
- type: bugfix
- docs: topics/using/tcpmappings/
-
- - version: 1.13.8
- date: '2021-06-08'
- notes:
- - title: Fix Ambassador Cloud Service Details
- body: >-
- Ambassador Agent now accurately reports up-to-date Endpoint information to Ambassador
- Cloud
- type: bugfix
- docs: tutorials/getting-started/#3-connect-your-cluster-to-ambassador-cloud
- image: ../images/edge-stack-1.13.8-cloud-bugfix.png
-
- - title: Improved Argo Rollouts Experience with Ambassador Cloud
- body: >-
- Ambassador Agent reports ConfigMaps and Deployments to Ambassador Cloud to provide a
- better Argo Rollouts experience. See [Argo+Ambassador
- documentation](https://www.getambassador.io/docs/argo) for more info.
- type: feature
- docs: https://www.getambassador.io/docs/argo
-
- - version: 1.13.7
- date: '2021-06-03'
- notes:
- - title: JSON logging support
- body: >-
- Add AMBASSADOR_JSON_LOGGING to enable JSON for most of the Ambassador control plane. Some
- (but few) logs from gunicorn and the Kubernetes client-go package still log text.
- image: ../images/edge-stack-1.13.7-json-logging.png
- docs: topics/running/running/#log-format
- type: feature
-
- - title: Consul resolver bugfix with TCPMappings
- body: >-
- Fixed a bug where the Consul resolver would not actually use Consul endpoints with
- TCPMappings.
- image: ../images/edge-stack-1.13.7-tcpmapping-consul.png
- docs: topics/running/resolvers/#the-consul-resolver
- type: bugfix
-
- - title: Memory usage calculation improvements
- body: >-
- Ambassador now calculates its own memory usage in a way that is more similar to how the
- kernel OOMKiller tracks memory.
- image: ../images/edge-stack-1.13.7-memory.png
- docs: topics/running/scaling/#inspecting-ambassador-performance
- type: change
-
- - version: 1.13.6
- date: '2021-05-24'
- notes:
- - title: Quieter logs in legacy mode
- type: bugfix
- body: >-
- Fixed a regression where Ambassador snapshot data was logged at the INFO label
- when using AMBASSADOR_LEGACY_MODE=true
.
-
- - version: 1.13.5
- date: '2021-05-13'
- notes:
- - title: Correctly support proper_case and preserve_external_request_id
- type: bugfix
- body: >-
- Fix a regression from 1.8.0 that prevented ambassador
Module
- config keys proper_case
and preserve_external_request_id
- from working correctly.
- docs: topics/running/ambassador/#header-case
-
- - title: Correctly support Ingress statuses in all cases
- type: bugfix
- body: >-
- Fixed a regression in detecting the Ambassador Kubernetes service that could cause the
- wrong IP or hostname to be used in Ingress statuses (thanks, [Noah
- Fontes](https://github.com/impl)!
- docs: topics/running/ingress-controller
-
- - version: 1.13.4
- date: '2021-05-11'
- notes:
- - title: Envoy 1.15.5
- body: >-
- Incorporate the Envoy 1.15.5 security update by adding the
- reject_requests_with_escaped_slashes
option to the Ambassador module.
- image: ../images/edge-stack-1.13.4.png
- docs: topics/running/ambassador/#rejecting-client-requests-with-escaped-slashes
- type: security
-
-# Don't go any further back than 1.13.4.
diff --git a/content/en/docs/2.5/topics/_index.md b/content/en/docs/2.5/topics/_index.md
new file mode 100644
index 00000000..4beca302
--- /dev/null
+++ b/content/en/docs/2.5/topics/_index.md
@@ -0,0 +1,4 @@
+---
+title: "Topics"
+weight: 30
+---
diff --git a/content/en/docs/2.5/topics/concepts/index.md b/content/en/docs/2.5/topics/concepts/_index.md
similarity index 81%
rename from content/en/docs/2.5/topics/concepts/index.md
rename to content/en/docs/2.5/topics/concepts/_index.md
index 2d02a027..df88d005 100644
--- a/content/en/docs/2.5/topics/concepts/index.md
+++ b/content/en/docs/2.5/topics/concepts/_index.md
@@ -1,4 +1,7 @@
-# Core concepts
+---
+title: "Core Concepts"
+description: "This section of the documentation introduces core concepts of Kubernetes and Emissary"
+---
This section of the documentation introduces core concepts of Kubernetes and Ambassador. Kubernetes and microservices introduce a number of new, powerful paradigms for software development, and Ambassador takes full advantage of these paradigms.
diff --git a/content/en/docs/2.5/topics/concepts/architecture.md b/content/en/docs/2.5/topics/concepts/architecture.md
index 4ef23b74..c4c9c12c 100644
--- a/content/en/docs/2.5/topics/concepts/architecture.md
+++ b/content/en/docs/2.5/topics/concepts/architecture.md
@@ -1,27 +1,30 @@
-# The $productName$ architecture
+---
+title: "Architecture"
+description: "This section of the documentation provides an overview of the Emissary architecture"
+---
-## $productName$ is a control plane
+## Emissary is a control plane
-$productName$ is a specialized [control plane for Envoy Proxy](https://blog.getambassador.io/the-importance-of-control-planes-with-service-meshes-and-front-proxies-665f90c80b3d). In this architecture, $productName$ translates configuration (in the form of Kubernetes Custom Resources) to Envoy configuration. All actual traffic is directly handled by the high-performance [Envoy Proxy](https://www.envoyproxy.io).
+Emissary is a specialized [control plane for Envoy Proxy](https://blog.getambassador.io/the-importance-of-control-planes-with-service-meshes-and-front-proxies-665f90c80b3d). In this architecture, Emissary translates configuration (in the form of Kubernetes Custom Resources) to Envoy configuration. All actual traffic is directly handled by the high-performance [Envoy Proxy](https://www.envoyproxy.io).
![Architecture](../../../images/ambassador-arch.png)
## Details
1. The service owner defines configuration in Kubernetes manifests.
-2. When the manifest is applied to the cluster, the Kubernetes API notifies $productName$ of the change.
-3. $productName$ parses the change and transforms the configuration into a semantic intermediate representation. Envoy configuration is generated from this IR.
+2. When the manifest is applied to the cluster, the Kubernetes API notifies Emissary of the change.
+3. Emissary parses the change and transforms the configuration into a semantic intermediate representation. Envoy configuration is generated from this IR.
4. The new configuration is passed to Envoy via the gRPC-based Aggregated Discovery Service (ADS) API.
5. Traffic flows through the reconfigured Envoy, without dropping any connections.
## Scaling and availability
-$productName$ relies on Kubernetes for scaling, high availability, and persistence. All $productName$ configuration is stored directly in Kubernetes; there is no database. $productName$ is packaged as a single container that contains both the control plane and an Envoy Proxy instance. By default, $productName$ is deployed as a Kubernetes `deployment` and can be scaled and managed like any other Kubernetes deployment.
+Emissary relies on Kubernetes for scaling, high availability, and persistence. All Emissary configuration is stored directly in Kubernetes; there is no database. Emissary is packaged as a single container that contains both the control plane and an Envoy Proxy instance. By default, Emissary is deployed as a Kubernetes `deployment` and can be scaled and managed like any other Kubernetes deployment.
### Stateless architecture
-By design, $productName$ is an entirely stateless architecture. Each individual $productName$ instance operates independently of other instances. These $productName$ instances rely on Kubernetes to coordinate the configuration between the different $productName$ instances. This enables $productName$ to sidestep the need to engineer a safe, highly available centralized control plane (and if you don't think that this is hard, check out [Jepsen](https://jepsen.io)). By contrast, other control plane architectures rely on a single centralized control plane to manage multiple instances of the data plane. This means that these control plane architectures must engineer resilience and availability into their central control plane.
+By design, Emissary is an entirely stateless architecture. Each individual Emissary instance operates independently of other instances. These Emissary instances rely on Kubernetes to coordinate the configuration between the different Emissary instances. This enables Emissary to sidestep the need to engineer a safe, highly available centralized control plane (and if you don't think that this is hard, check out [Jepsen](https://jepsen.io)). By contrast, other control plane architectures rely on a single centralized control plane to manage multiple instances of the data plane. This means that these control plane architectures must engineer resilience and availability into their central control plane.
## Envoy Proxy
-$productName$ closely tracks Envoy Proxy releases. A stable branch of Envoy Proxy is maintained that enables the team to cherry-pick specific fixes into $productName$.
+Emissary closely tracks Envoy Proxy releases. A stable branch of Envoy Proxy is maintained that enables the team to cherry-pick specific fixes into Emissary.
diff --git a/content/en/docs/2.5/topics/concepts/gitops-continuous-delivery.md b/content/en/docs/2.5/topics/concepts/gitops-continuous-delivery.md
index 336a1c66..c8878695 100644
--- a/content/en/docs/2.5/topics/concepts/gitops-continuous-delivery.md
+++ b/content/en/docs/2.5/topics/concepts/gitops-continuous-delivery.md
@@ -1,14 +1,19 @@
+---
+title: "Operating Model"
+description: "This section of the documentation provides an overview of the operating model of Emissary"
+---
+
# The Ambassador operating model: GitOps and continuous delivery
Containerized applications deployed in Kubernetes generally follow the microservices design pattern, where an application composed of dozens or even hundreds of services communicate with each other. Independent application development teams are responsible for the full lifecycle of a service, including coding, testing, deployment, release, and operations. By giving these teams independence, microservices enable organizations to scale their development without sacrificing agility.
## Policies, declarative configuration, and Custom Resource Definitions
-$productName$ configuration is built on the concept of _policies_. A policy is a statement of intent and codified in a declarative configuration file. $productName$ takes advantage of Kubernetes Custom Resource Definitions (CRDs) to provide a declarative configuration workflow that is idiomatic with Kubernetes.
+Emissary configuration is built on the concept of _policies_. A policy is a statement of intent and codified in a declarative configuration file. Emissary takes advantage of Kubernetes Custom Resource Definitions (CRDs) to provide a declarative configuration workflow that is idiomatic with Kubernetes.
Both operators and application developers can write policies. Typically, operators are responsible for global policies that affect all microservices. Common examples of these types of policies include TLS configuration and metrics. Application development teams will want to own the policies that affect their specific service, as these settings will vary from service to service. Examples of these types of service-specific settings include protocols (e.g., HTTP, gRPC, TCP, WebSockets), timeouts, and cross-origin resource sharing settings.
-Because many different teams may need to write policies, $productName$ supports a decentralized configuration model. Individual policies are written in different files. $productName$ aggregates all policies into one master policy configuration for the edge.
+Because many different teams may need to write policies, Emissary supports a decentralized configuration model. Individual policies are written in different files. Emissary aggregates all policies into one master policy configuration for the edge.
## Continuous delivery and GitOps
@@ -39,28 +44,28 @@ Contrast this a **traditional, manual workflow:**
The self-service, continuous delivery model is critical for ensuring that edge operations can scale.
-## Continuous delivery, GitOps, and $productName$
+## Continuous delivery, GitOps, and Emissary
-Adopting a continuous delivery workflow with $productName$ via GitOps provides several advantages:
+Adopting a continuous delivery workflow with Emissary via GitOps provides several advantages:
1. **Reduced deployment risk**: By immediately deploying approved configuration into production, configuration issues can be rapidly identified. Resolving any issue is as simple as rolling back the change in source control.
-2. **Auditability**: Understanding the specific configuration of $productName$ is as simple as reviewing the configuration in the source control repository. Moreover, any changes made to the configuration will also be recorded, providing context on previous configurations.
+2. **Auditability**: Understanding the specific configuration of Emissary is as simple as reviewing the configuration in the source control repository. Moreover, any changes made to the configuration will also be recorded, providing context on previous configurations.
3. **Simpler infrastructure upgrades**: Upgrading any infrastructure component,
- whether the component is Kubernetes, $productName$, or some other piece of
+ whether the component is Kubernetes, Emissary, or some other piece of
infrastructure, is straightforward. A replica environment can be easily
created and tested directly from your source control system. Once the
upgrade has been validated, the replica environment can be swapped into
production, or production can be live upgraded.
4. **Security**: Access to production cluster(s) can be restricted to senior operators and an automated system, reducing the number of individuals who can directly modify the cluster.
-In a typical $productName$ GitOps workflow:
+In a typical Emissary GitOps workflow:
-* Each service has its own $productName$ policy. This policy consists of one or more $productName$ custom resource definitions, specified in YAML.
+* Each service has its own Emissary policy. This policy consists of one or more Emissary custom resource definitions, specified in YAML.
* This policy is stored in the same repository as the service, and managed by the service team.
* Changes to the policy follow the GitOps workflow discussed above (e.g., pull request, approval, and continuous delivery).
* Global configuration that is managed by operations are stored in a central repository alongside other cluster configuration. This repository is also set up for continuous delivery with a GitOps workflow.
## Further reading
-* The [AppDirect engineering team](https://blog.getambassador.io/fireside-chat-with-alex-gervais-accelerating-appdirect-developer-workflow-with-ambassador-7586597b1c34) writes $productName$ configurations within each team's Kubernetes service YAML manifests. These are stored in git and follow the same review/approval process as any other code unit, and a continuous delivery pipeline listens on changes to the repository and applies changes to Kubernetes.
+* The [AppDirect engineering team](https://blog.getambassador.io/fireside-chat-with-alex-gervais-accelerating-appdirect-developer-workflow-with-ambassador-7586597b1c34) writes Emissary configurations within each team's Kubernetes service YAML manifests. These are stored in git and follow the same review/approval process as any other code unit, and a continuous delivery pipeline listens on changes to the repository and applies changes to Kubernetes.
* Netflix introduces [full cycle development](https://netflixtechblog.com/full-cycle-developers-at-netflix-a08c31f83249), a model for developing microservices
diff --git a/content/en/docs/2.5/topics/concepts/kubernetes-network-architecture.md b/content/en/docs/2.5/topics/concepts/kubernetes-network-architecture.md
index 6650aa60..f50fbbb7 100644
--- a/content/en/docs/2.5/topics/concepts/kubernetes-network-architecture.md
+++ b/content/en/docs/2.5/topics/concepts/kubernetes-network-architecture.md
@@ -1,4 +1,7 @@
-# Kubernetes Network architecture
+---
+title: "Kubernetes Network Architecture"
+description: "This section of the documentation provides an overview of the Kubernetes network architecture"
+---
## Kubernetes has its own isolated network
@@ -34,7 +37,7 @@ The most popular approach to configuring edge proxies is with the Kubernetes ing
The ingress resource is a Kubernetes standard. As such, it is a lowest common denominator resource. In practice, users find that the ingress resource is insufficient in scope to address the requirements for edge routing. Semantics such as TLS termination, redirecting to TLS, timeouts, rate limiting, and authentication are all beyond the scope of the ingress resource.
-$productName$ can function as an ingress controller (i.e., it reads ingress resources), although it also includes many other capabilities that are beyond the scope of the ingress specification. Most $productName$ users find that the various additional capabilities of $productName$ are essential, and end up using $productName$'s extensions to the ingress resource, instead of using ingress resources themselves.
+Emissary can function as an ingress controller (i.e., it reads ingress resources), although it also includes many other capabilities that are beyond the scope of the ingress specification. Most Emissary users find that the various additional capabilities of Emissary are essential, and end up using Emissary's extensions to the ingress resource, instead of using ingress resources themselves.
### Kubernetes services and Pods
@@ -44,7 +47,7 @@ When traffic is routed to the pods via a Kubernetes service, Kubernetes uses a b
Traffic can also be routed directly to pods, bypassing the Kubernetes service. Since pods are much more ephemeral than Kubernetes services, this approach requires an edge proxy that is optimized for this use case. In particular, the edge proxy needs to support real-time discovery of pods, and be able to dynamically update pod locations without downtime.
-$productName$ supports routing both to Kubernetes services and directly to pods.
+Emissary supports routing both to Kubernetes services and directly to pods.
## Further reading
diff --git a/content/en/docs/2.5/topics/concepts/microservices-api-gateways.md b/content/en/docs/2.5/topics/concepts/microservices-api-gateways.md
index ba95b8fc..923d0491 100644
--- a/content/en/docs/2.5/topics/concepts/microservices-api-gateways.md
+++ b/content/en/docs/2.5/topics/concepts/microservices-api-gateways.md
@@ -1,4 +1,7 @@
-# Microservices API gateways
+---
+title: "Microservices & API gateways"
+description: "This section of the documentation provides an overview of microserverse and API Gateways"
+---
A microservices API gateway is an API gateway designed to accelerate the development workflow of independent services teams. A microservices API gateway provides all the functionality for a team to independently publish, monitor, and update a microservice.
diff --git a/content/en/docs/2.5/topics/concepts/progressive-delivery.md b/content/en/docs/2.5/topics/concepts/progressive-delivery.md
index 4e2f0d42..dd86753a 100644
--- a/content/en/docs/2.5/topics/concepts/progressive-delivery.md
+++ b/content/en/docs/2.5/topics/concepts/progressive-delivery.md
@@ -1,4 +1,6 @@
-# Progressive delivery
+---
+title: "Progressive Delivery"
+---
Today's cloud-native applications may consist of hundreds of services, each of which are being updated at any time. Thus, many cloud-native organizations augment regression test strategies with testing in production using progressive delivery techniques.
@@ -18,7 +20,7 @@ There are a number of different strategies for progressive delivery. These inclu
Observability is a critical requirement for testing in production. Regardless of progressive delivery strategy, collecting key metrics around latency, traffic, errors, and saturation (the [“Four Golden Signals of Monitoring”](https://landing.google.com/sre/sre-book/chapters/monitoring-distributed-systems/#xref_monitoring_golden-signals)) provides valuable insight into the stability and performance of a new version of the service. Moreover, application developers can compare the metrics (e.g., latency) between the production version and an updated version. If the metrics are similar, then updates can proceed with much greater confidence.
-$productName$ supports a variety of strategies for progressive delivery. These strategies are discussed in further detail below.
+Emissary supports a variety of strategies for progressive delivery. These strategies are discussed in further detail below.
### Canary releases
diff --git a/content/en/docs/2.5/topics/concepts/rate-limiting-at-the-edge.md b/content/en/docs/2.5/topics/concepts/rate-limiting-at-the-edge.md
index 1f849861..106cf6c5 100644
--- a/content/en/docs/2.5/topics/concepts/rate-limiting-at-the-edge.md
+++ b/content/en/docs/2.5/topics/concepts/rate-limiting-at-the-edge.md
@@ -1,4 +1,6 @@
-# Rate limiting concepts at the edge
+---
+title: "Rate limiting at the edge"
+---
Rate limiting at the edge is a technique that is used to prevent a sudden or sustained increase in user traffic from breaking an API or underlying service. On the Internet, users can do whatever they want to your APIs, as you have no direct control over these end-users. Whether it’s intentional or not, these users can impact the availability, responsiveness, and scalability of your service.
@@ -22,9 +24,9 @@ The table below outlines several scenarios where rate limiting and load shedding
## Avoiding contention with rate limiting configuration: Decoupling Dev and Ops
-One of the core features of $productName$ is the decentralization of configuration, allowing operations and development teams to independently control $productName$, as well as individual application development teams to minimize collaboration when configuring independently deployable services. This same approach applies to rate limiting configuration.
+One of the core features of Emissary is the decentralization of configuration, allowing operations and development teams to independently control Emissary, as well as individual application development teams to minimize collaboration when configuring independently deployable services. This same approach applies to rate limiting configuration.
-The $productName$ rate limiting configuration allows centralized operations teams to define and implement global rate limiting and load shedding policies to protect the system, while still allowing individual application teams to define rate limiting policies that enforce business rules, for example, around paying and non-paying customers (perhaps implementing the so-called “freemium” model). See [Advanced Rate Limiting](../../../howtos/advanced-rate-limiting) documentation for examples.
+The Emissary rate limiting configuration allows centralized operations teams to define and implement global rate limiting and load shedding policies to protect the system, while still allowing individual application teams to define rate limiting policies that enforce business rules, for example, around paying and non-paying customers (perhaps implementing the so-called “freemium” model). See [Advanced Rate Limiting](../../../howtos/advanced-rate-limiting) documentation for examples.
## Benefits of applying a rate limiter to the edge
diff --git a/content/en/docs/3.1/topics/install/index.md b/content/en/docs/2.5/topics/install/_index.md
similarity index 52%
rename from content/en/docs/3.1/topics/install/index.md
rename to content/en/docs/2.5/topics/install/_index.md
index 40fa95fd..c0c54068 100644
--- a/content/en/docs/3.1/topics/install/index.md
+++ b/content/en/docs/2.5/topics/install/_index.md
@@ -1,34 +1,36 @@
-import Alert from '@material-ui/lab/Alert';
-import './index.less'
+---
+title: "Install"
+description: "This section of the documentation provides installation instructions"
+---
-# Installing $productName$
+# Installing Emissary
## Install with Helm
Helm, the package manager for Kubernetes, is the recommended way to install
-$productName$. Full details are in the [Helm instructions.](helm/)
+Emissary. Full details are in the [Helm instructions.](helm/)
## Install with Kubernetes YAML
-Another way to install $productName$ if you are unable to use Helm is to
+Another way to install Emissary if you are unable to use Helm is to
directly apply Kubernetes YAML. See details in the
[manual YAML installation instructions.](yaml-install).
## Try the demo with Docker
-The Docker install will let you try the $productName$ locally in seconds,
-but is not supported for production workloads. [Try $productName$ on Docker.](docker/)
+The Docker install will let you try the Emissary locally in seconds,
+but is not supported for production workloads. [Try Emissary on Docker.](docker/)
## Upgrade or migrate to a newer version
-If you already have an existing installation of $AESproductName$ or
-$OSSproductName$, you can upgrade your instance. The [migration matrix](migration-matrix/)
+If you already have an existing installation of Ambassador Edge Stack or
+Emissary, you can upgrade your instance. The [migration matrix](migration-matrix/)
shows you how.
## Container Images
Although our installation guides will favor using the `docker.io` container registry,
-we publish $AESproductName$ and $OSSproductName$ releases to multiple registries.
+we publish Ambassador Edge Stack and Emissary releases to multiple registries.
Starting with version 1.0.0, you can pull the emissary image from any of the following registries:
@@ -36,12 +38,12 @@ Starting with version 1.0.0, you can pull the emissary image from any of the fol
- `gcr.io/datawire/`
We want to give you flexibility and independence from a hosting platform's uptime to support
-your production needs for $AESproductName$ or $OSSproductName$. Read more about
-[Running $productName$ in Production](../running).
+your production needs for Ambassador Edge Stack or Emissary. Read more about
+[Running Emissary in Production](../running).
# What’s Next?
-$productName$ has a comprehensive range of [features](/features/) to
-support the requirements of any edge microservice. To learn more about how $productName$ works, along with use cases, best practices, and more,
-check out the [Welcome page](../../tutorials/getting-started) or read the [$productName$
+Emissary has a comprehensive range of [features](/features/) to
+support the requirements of any edge microservice. To learn more about how Emissary works, along with use cases, best practices, and more,
+check out the [Welcome page](../../tutorials/getting-started) or read the [Emissary
Story](../../about/why-ambassador).
diff --git a/content/en/docs/2.5/topics/install/ambassador-oss-community.md b/content/en/docs/2.5/topics/install/ambassador-oss-community.md
index b53d1407..e4150e2f 100644
--- a/content/en/docs/2.5/topics/install/ambassador-oss-community.md
+++ b/content/en/docs/2.5/topics/install/ambassador-oss-community.md
@@ -1,14 +1,14 @@
-# Integration in community projects
+---
+title: Integration to community projects
+---
-import Table from "../../../../../src/components/CommunityTable";
-
-**$AESproductName$ is now available and includes additional functionality beyond the current $OSSproductName$.**
+**Ambassador Edge Stack is now available and includes additional functionality beyond the current Emissary.**
These features include automatic HTTPS, OAuth/OpenID Connect authentication support, integrated rate
limiting, a developer portal, and [more](/edge-stack-faq/).
-## $OSSproductName$ integrations
+## Emissary integrations
-If you still want to use just $OSSproductName$, don't worry! $OSSproductName$
+If you still want to use just Emissary, don't worry! Emissary
is currently available out-of-the-box in some Kubernetes installers and local environments.
-
\ No newline at end of file
+
diff --git a/content/en/docs/2.5/topics/install/bare-metal.md b/content/en/docs/2.5/topics/install/bare-metal.md
index 84ac1c8d..7a7cbfb5 100644
--- a/content/en/docs/2.5/topics/install/bare-metal.md
+++ b/content/en/docs/2.5/topics/install/bare-metal.md
@@ -1,12 +1,12 @@
-import Alert from '@material-ui/lab/Alert';
-
-# Install with bare metal
+---
+title: Bare metal
+---
-In cloud environments, provisioning a readily available network load balancer with $productName$ is the best option for handling ingress into your Kubernetes cluster. When running Kubernetes on a bare metal setup, where network load balancers are not available by default, we need to consider different options for exposing $productName$.
+In cloud environments, provisioning a readily available network load balancer with Emissary is the best option for handling ingress into your Kubernetes cluster. When running Kubernetes on a bare metal setup, where network load balancers are not available by default, we need to consider different options for exposing Emissary.
-## Exposing $productName$ via NodePort
+## Exposing Emissary via NodePort
-The simplest way to expose an application in Kubernetes is via a `NodePort` service. In this configuration, we create the $productName$ service] and identify `type: NodePort` instead of `LoadBalancer`. Kubernetes will then create a service and assign that service a port to be exposed externally and direct traffic to $productName$ via the defined `port`.
+The simplest way to expose an application in Kubernetes is via a `NodePort` service. In this configuration, we create the Emissary service] and identify `type: NodePort` instead of `LoadBalancer`. Kubernetes will then create a service and assign that service a port to be exposed externally and direct traffic to Emissary via the defined `port`.
```yaml
---
@@ -26,15 +26,15 @@ spec:
service: ambassador
```
-Using a `NodePort` leaves $productName$ isolated from the host network, allowing the Kubernetes service to handle routing to $productName$ pods. You can drop-in this YAML to replace the `LoadBalancer` service in the [YAML installation guide](../yaml-install) and use `http://:/` as the host for requests.
+Using a `NodePort` leaves Emissary isolated from the host network, allowing the Kubernetes service to handle routing to Emissary pods. You can drop-in this YAML to replace the `LoadBalancer` service in the [YAML installation guide](../yaml-install) and use `http://:/` as the host for requests.
-## Exposing $productName$ via host network
+## Exposing Emissary via host network
-When running $productName$ on a bare metal install of Kubernetes, you have the option to configure $productName$ pods to use the network of the host they are running on. This method allows you to bind $productName$ directly to port 80 or 443 so you won't need to identify the port in requests.
+When running Emissary on a bare metal install of Kubernetes, you have the option to configure Emissary pods to use the network of the host they are running on. This method allows you to bind Emissary directly to port 80 or 443 so you won't need to identify the port in requests.
i.e `http://:/` becomes `http:///`
-This can be configured by setting `hostNetwork: true` in the $productName$ deployment. `dnsPolicy: ClusterFirstWithHostNet` will also need to set to tell $productName$ to use *KubeDNS* when attempting to resolve mappings.
+This can be configured by setting `hostNetwork: true` in the Emissary deployment. `dnsPolicy: ClusterFirstWithHostNet` will also need to set to tell Emissary to use *KubeDNS* when attempting to resolve mappings.
```diff
---
@@ -88,6 +88,6 @@ spec:
restartPolicy: Always
```
-This configuration does not require a defined $productName$ service, so you can remove that service if you have defined one.
+This configuration does not require a defined Emissary service, so you can remove that service if you have defined one.
-**Note:** Before configuring $productName$ with this method, consider some of the functionality that is lost by bypassing the Kubernetes service including only having one $productName$ able to bind to port 8080 or 8443 per node and losing any load balancing that is typically performed by Kubernetes services.
+**Note:** Before configuring Emissary with this method, consider some of the functionality that is lost by bypassing the Kubernetes service including only having one Emissary able to bind to port 8080 or 8443 per node and losing any load balancing that is typically performed by Kubernetes services.
diff --git a/content/en/docs/2.5/topics/install/convert-to-v3alpha1.md b/content/en/docs/2.5/topics/install/convert-to-v3alpha1.md
index e12d9aed..53e8f932 100644
--- a/content/en/docs/2.5/topics/install/convert-to-v3alpha1.md
+++ b/content/en/docs/2.5/topics/install/convert-to-v3alpha1.md
@@ -1,18 +1,18 @@
-import Alert from '@material-ui/lab/Alert';
-
-# Convert Configuration Resources to `getambassador.io/v3alpha1`
+---
+title: Convert to v3alpha1
+---
-Once your $productName$ $version$ installation is running, it is **strongly recommended** that
+Once your Emissary $version$ installation is running, it is **strongly recommended** that
you convert your existing configuration resources from `getambassador.io/v2` to
`getambassador.io/v3alpha1`.
While it is not necessary to convert all your resources to getambassador.io/v3alpha1
- immediately, you should ultimately update them all for full functionality with $productName$
+ immediately, you should ultimately update them all for full functionality with Emissary
In general, the best way to convert any resource is to start with `kubectl get`: using
-`kubectl get -o yaml` on any `getambassador.io/v2` resource will cause $productName$ to
+`kubectl get -o yaml` on any `getambassador.io/v2` resource will cause Emissary to
translate it to a `getambassador.io/v3alpha1` resource. You can then verify that the
`getambassador.io/v3alpha1` resource looks correct and re-apply it, which will convert the
stored copy to `getambassador.io/v3alpha1`.
@@ -23,10 +23,10 @@ As you do the conversion, here are the things to bear in mind:
`getambassador.io/v2` allowed `ambassador_id` to be either an array of strings, or a simple
string. In `getambassador.io/v3alpha1`, only the array form is supported: instead of
-`ambassador_id: "foo"`, use `ambassador_id: [ "foo" ]`. This applies to all $productName$
+`ambassador_id: "foo"`, use `ambassador_id: [ "foo" ]`. This applies to all Emissary
resources, and is supported by all versions of Ambassador 1.X.
-## 2. You must have a `Listener` for each port on which $productName$ should listen.
+## 2. You must have a `Listener` for each port on which Emissary should listen.
Learn more about Listener
@@ -38,7 +38,7 @@ are matched with them (see below).
## 3. `Listener`, `Host`, and `Mapping` must be explicit about how they associate.
-You need to have `Listener`s, `Host`s, and `Mapping`s correctly associated with each other for $productName$ 2.X configuration.
+You need to have `Listener`s, `Host`s, and `Mapping`s correctly associated with each other for Emissary 2.X configuration.
### 3.1. `Listener` and `Host` are associated through `Listener.hostBinding`
@@ -76,8 +76,8 @@ can also result in larger Envoy configurations that slow reconfiguration.
### 3.2. `Host` and `Mapping` are associated through `Host.mappingSelector`
-In $productName$ 1.X, `Mapping`s were nearly always associated with every `Host`. Since this
-tends to result in larger Envoy configurations that slow down reconfiguration, $productName$ 2.X
+In Emissary 1.X, `Mapping`s were nearly always associated with every `Host`. Since this
+tends to result in larger Envoy configurations that slow down reconfiguration, Emissary 2.X
inverts this behavior: **`Host` and `Mapping` will not associate without explicit selection**.
To have a `Mapping` associate with a `Host`, at least one of the following must hold:
@@ -117,7 +117,7 @@ has no `mappingSelector`, and
Learn more about TLSContext
-In $productName$ 1.X, simply creating a `TLSContext` is sufficient to terminate TLS, but in
+In Emissary 1.X, simply creating a `TLSContext` is sufficient to terminate TLS, but in
2.X you _must_ use a `Host`. The minimal setup to terminate TLS is now something like this:
```yaml
@@ -265,7 +265,7 @@ certificate (the semantic of `tls: true`), omit the `tls` element and prefix the
A few settings have moved from the `Module` in 2.0. Make sure you review the following settings
and move them to their new locations if you are using them in a `Module`:
-- Configuration for the `PROXY` protocol is part of the `Listener` resource in $productName$ 2.0,
+- Configuration for the `PROXY` protocol is part of the `Listener` resource in Emissary 2.0,
so the `use_proxy_protocol` element of the `ambassador` `Module` is no longer supported.
- `xff_num_trusted_hops` has been removed from the `Module`, and its functionality has been moved
diff --git a/content/en/docs/2.5/topics/install/docker.md b/content/en/docs/2.5/topics/install/docker.md
index e430a55c..f2ad9db5 100644
--- a/content/en/docs/2.5/topics/install/docker.md
+++ b/content/en/docs/2.5/topics/install/docker.md
@@ -1,22 +1,22 @@
-import Alert from '@material-ui/lab/Alert';
+---
+title: Docker
+---
-# Run the demo with Docker
-
-In this Docker quickstart guide, we'll get $productName$ running locally
+In this Docker quickstart guide, we'll get Emissary running locally
with a demo configuration. In the next section, we'll then walk through how to
-deploy $productName$ in Kubernetes with a custom configuration.
+deploy Emissary in Kubernetes with a custom configuration.
## 1. Running the demo configuration
-By default, $productName$ uses a demo configuration to show some of its basic features. Get it running with Docker, and expose $productName$ on port 8080:
+By default, Emissary uses a demo configuration to show some of its basic features. Get it running with Docker, and expose Emissary on port 8080:
```
docker run -it -p 8080:8080 --name=$productDeploymentName$ --rm docker.io/emissaryingress/emissary:$version$ --demo
```
-## 2. $productName$'s diagnostics
+## 2. Emissary's diagnostics
-$productName$ provides live diagnostics viewable with a web browser. While this would normally not be exposed to the public network, the Docker demo publishes the diagnostics service at the following URL:
+Emissary provides live diagnostics viewable with a web browser. While this would normally not be exposed to the public network, the Docker demo publishes the diagnostics service at the following URL:
`http://localhost:8080/ambassador/v0/diag/`
@@ -26,11 +26,11 @@ We'll talk more about authentication shortly.
To access the Diagnostics page with authentication, use `curl http://localhost:8080/ambassador/v0/diag/ -u admin:admin`
-Some of the most important information - your $productName$ version, how recently $productName$'s configuration was updated, and how recently Envoy last reported status to $productName$ - is right at the top. The diagnostics overview can show you what it sees in your configuration map, and which Envoy objects were created based on your configuration.
+Some of the most important information - your Emissary version, how recently Emissary's configuration was updated, and how recently Envoy last reported status to Emissary - is right at the top. The diagnostics overview can show you what it sees in your configuration map, and which Envoy objects were created based on your configuration.
## 3. The Quote service
-Since $productName$ is a comprehensive, self-service edge stack, its primary purpose is to provide access and control to microservices for the teams that manage them. The demo is preconfigured with a mapping that connects the `/qotm/` resource to the "Quote" service -- a demo service that supplies quotations. You can try it out by opening
+Since Emissary is a comprehensive, self-service edge stack, its primary purpose is to provide access and control to microservices for the teams that manage them. The demo is preconfigured with a mapping that connects the `/qotm/` resource to the "Quote" service -- a demo service that supplies quotations. You can try it out by opening
`http://localhost:8080/qotm/`
@@ -46,7 +46,7 @@ You can see details of the mapping by clicking the blue `http://localhost:8080/q
## 4. Authentication
-On the diagnostic overview, you can also see that $productName$ is configured to do authentication -- in the middle of the overview page, you'll see the `Ambassador Services In Use` section, and you can click the `tcp://127.0.0.1:5050` link for details on the `AuthService` configuration. This demo auth service is running inside the Docker container with $productName$ and the Quote service, and $productName$ uses it to mediate access to everything behind $productName$.
+On the diagnostic overview, you can also see that Emissary is configured to do authentication -- in the middle of the overview page, you'll see the `Ambassador Services In Use` section, and you can click the `tcp://127.0.0.1:5050` link for details on the `AuthService` configuration. This demo auth service is running inside the Docker container with Emissary and the Quote service, and Emissary uses it to mediate access to everything behind Emissary.
You saw above that access to the diagnostic overview required you to authenticate as an administrator. Getting a random quote does not require authentication, but to get a specific quote, you'll have to authenticate as a demo user. To see this in action, open
@@ -66,8 +66,8 @@ curl -Lv -u username:password 'http://localhost:8080/qotm/quote/5?json=true'
will succeed. (Note that that's literally "username" and "password" -- the demo auth service is deliberately not very secure!)
-Note that it's up to the auth service to decide what needs authentication -- teaming $productName$ with an authentication service can be as flexible or strict as you need it to be.
+Note that it's up to the auth service to decide what needs authentication -- teaming Emissary with an authentication service can be as flexible or strict as you need it to be.
## Next steps
-We've just walked through some of the core features of $productName$ in a local configuration. To see $productName$ in action on Kubernetes, check out the [Installation Guide](../).
+We've just walked through some of the core features of Emissary in a local configuration. To see Emissary in action on Kubernetes, check out the [Installation Guide](../).
diff --git a/content/en/docs/2.5/topics/install/helm.md b/content/en/docs/2.5/topics/install/helm.md
index 4c8a9836..3b2f2aa5 100644
--- a/content/en/docs/2.5/topics/install/helm.md
+++ b/content/en/docs/2.5/topics/install/helm.md
@@ -1,21 +1,21 @@
-import Alert from '@material-ui/lab/Alert';
-
-# Install with Helm
+---
+title: Helm
+---
- To migrate from $productName$ 1.X to $productName$ 2.X, see the
- [$productName$ migration matrix](../migration-matrix/). This guide
+ To migrate from Emissary 1.X to Emissary 2.X, see the
+ [Emissary migration matrix](../migration-matrix/). This guide
**will not work** for that, due to changes to the configuration
- resources used for $productName$ 2.X.
+ resources used for Emissary 2.X.
-[Helm](https://helm.sh) is a package manager for Kubernetes that automates the release and management of software on Kubernetes. $productName$ can be installed via a Helm chart with a few simple steps, depending on if you are deploying for the first time, upgrading $productName$ from an existing installation, or migrating from $productName$.
+[Helm](https://helm.sh) is a package manager for Kubernetes that automates the release and management of software on Kubernetes. Emissary can be installed via a Helm chart with a few simple steps, depending on if you are deploying for the first time, upgrading Emissary from an existing installation, or migrating from Emissary.
## Before you begin
-The $productName$ Helm chart is hosted by Datawire and published at `https://app.getambassador.io`.
+The Emissary Helm chart is hosted by Datawire and published at `https://app.getambassador.io`.
Start by adding this repo to your helm client with the following command:
@@ -26,11 +26,11 @@ helm repo update
## Install with Helm
-When you run the Helm chart, it installs $productName$.
+When you run the Helm chart, it installs Emissary.
-1. Install the $productName$ CRDs.
+1. Install the Emissary CRDs.
- Before installing $productName$ $version$ itself, you must configure your
+ Before installing Emissary $version$ itself, you must configure your
Kubernetes cluster to support the `getambassador.io/v3alpha1` and `getambassador.io/v2`
configuration resources. This is required.
@@ -40,9 +40,9 @@ When you run the Helm chart, it installs $productName$.
```
- $productName$ $version$ includes a Deployment in the `emissary-system` namespace
+ Emissary $version$ includes a Deployment in the `emissary-system` namespace
called emissary-apiext
. This is the APIserver extension
- that supports converting $productName$ CRDs between getambassador.io/v2
+ that supports converting Emissary CRDs between getambassador.io/v2
and getambassador.io/v3alpha1
. This Deployment needs to be running at
all times.
@@ -54,11 +54,11 @@ When you run the Helm chart, it installs $productName$.
- There is a known issue with the emissary-apiext
service that impacts all $productName$ 2.x and 3.x users. Specifically, the TLS certificate used by apiext expires one year after creation and does not auto-renew. All users who are running $productName$/$AESproductName$ 2.x or 3.x with the apiext service should proactively renew their certificate as soon as practical by running kubectl delete --all secrets --namespace=emissary-system
to delete the existing certificate, and then restart the emissary-apiext
deployment with kubectl rollout restart deploy/emissary-apiext -n emissary-system
.
+ There is a known issue with the emissary-apiext
service that impacts all Emissary 2.x and 3.x users. Specifically, the TLS certificate used by apiext expires one year after creation and does not auto-renew. All users who are running Emissary/Ambassador Edge Stack 2.x or 3.x with the apiext service should proactively renew their certificate as soon as practical by running kubectl delete --all secrets --namespace=emissary-system
to delete the existing certificate, and then restart the emissary-apiext
deployment with kubectl rollout restart deploy/emissary-apiext -n emissary-system
.
This will create a new certificate with a one year expiration. We will issue a software patch to address this issue well before the one year expiration. Note that certificate renewal will not cause any downtime.
-2. Install the $productName$ Chart with the following command:
+2. Install the Emissary Chart with the following command:
```
helm install -n $productNamespace$ --create-namespace \
@@ -68,21 +68,21 @@ When you run the Helm chart, it installs $productName$.
3. Next Steps
- $productName$ shold now be successfully installed and running, but in order to get started deploying Services and test routing to them you need to configure a few more resources.
+ Emissary shold now be successfully installed and running, but in order to get started deploying Services and test routing to them you need to configure a few more resources.
- - [The `Listener` Resource](../../running/listener/) is required to configure which ports the $productName$ pods listen on so that they can begin responding to requests.
+ - [The `Listener` Resource](../../running/listener/) is required to configure which ports the Emissary pods listen on so that they can begin responding to requests.
- [The `Mapping` Resouce](../../using/intro-mappings/) is used to configure routing requests to services in your cluster.
- [The `Host` Resource](../../running/host-crd/) configures TLS termination for enablin HTTPS communication.
- - Explore how $productName$ [configures communication with clients](../../../howtos/configure-communications)
+ - Explore how Emissary [configures communication with clients](../../../howtos/configure-communications)
- We strongly recommend following along with our Quickstart Guide to get started by creating a Listener
, deploying a simple service to test with, and setting up a Mapping
to route requests from $productName$ to the demo service.
+ We strongly recommend following along with our Quickstart Guide to get started by creating a Listener
, deploying a simple service to test with, and setting up a Mapping
to route requests from Emissary to the demo service.
- $productName$ $version$ includes a Deployment in the $productNamespace$ namespace
+ Emissary $version$ includes a Deployment in the $productNamespace$ namespace
called emissary-apiext
. This is the APIserver extension
- that supports converting $productName$ CRDs between getambassador.io/v2
+ that supports converting Emissary CRDs between getambassador.io/v2
and getambassador.io/v3alpha1
. This Deployment needs to be running at
all times.
@@ -99,4 +99,4 @@ For more advanced configuration and details about helm values,
## Upgrading an existing installation
See the [migration matrix](../migration-matrix) for instructions about upgrading
-$productName$.
+Emissary.
diff --git a/content/en/docs/2.5/topics/install/index.less b/content/en/docs/2.5/topics/install/index.less
deleted file mode 100644
index bc649e7c..00000000
--- a/content/en/docs/2.5/topics/install/index.less
+++ /dev/null
@@ -1,57 +0,0 @@
-@media (max-width: 769px) {
- #index-installContainer {
- flex-direction: column;
- }
- .index-dropdown {
- width: auto;
- }
- .index-dropBtn {
- width: 100%;
- }
-}
-
-.index-dropBtn {
- background-color: #8e77ff;
- color: white;
- padding: 10px;
- font-size: 16px;
- border: none;
- margin-top: -20px;
-}
-
-.index-dropdown {
- position: relative;
- display: inline-block;
-}
-
-.index-dropdownContent {
- display: none;
- position: absolute;
- background-color: #f1f1f1;
- width: 100%;
- box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
- z-index: 1;
-}
-
-.index-dropdownContent a {
- color: black;
- padding: 12px 16px;
- text-decoration: none;
- display: block;
-}
-
-.index-dropdownContent a:hover {
- background-color: #ddd;
-}
-
-.index-dropdown:hover .index-dropdownContent {
- display: block;
-}
-
-.index-dropdown:hover .index-dropBtn {
- background-color: #5f3eff;
-}
-
-#index-installContainer {
- display: flex;
-}
diff --git a/content/en/docs/2.5/topics/install/index.md b/content/en/docs/2.5/topics/install/index.md
deleted file mode 100644
index 40fa95fd..00000000
--- a/content/en/docs/2.5/topics/install/index.md
+++ /dev/null
@@ -1,47 +0,0 @@
-import Alert from '@material-ui/lab/Alert';
-import './index.less'
-
-# Installing $productName$
-
-## Install with Helm
-
-Helm, the package manager for Kubernetes, is the recommended way to install
-$productName$. Full details are in the [Helm instructions.](helm/)
-
-## Install with Kubernetes YAML
-
-Another way to install $productName$ if you are unable to use Helm is to
-directly apply Kubernetes YAML. See details in the
-[manual YAML installation instructions.](yaml-install).
-
-## Try the demo with Docker
-
-The Docker install will let you try the $productName$ locally in seconds,
-but is not supported for production workloads. [Try $productName$ on Docker.](docker/)
-
-## Upgrade or migrate to a newer version
-
-If you already have an existing installation of $AESproductName$ or
-$OSSproductName$, you can upgrade your instance. The [migration matrix](migration-matrix/)
-shows you how.
-
-## Container Images
-
-Although our installation guides will favor using the `docker.io` container registry,
-we publish $AESproductName$ and $OSSproductName$ releases to multiple registries.
-
-Starting with version 1.0.0, you can pull the emissary image from any of the following registries:
-
-- `docker.io/emissaryingress/`
-- `gcr.io/datawire/`
-
-We want to give you flexibility and independence from a hosting platform's uptime to support
-your production needs for $AESproductName$ or $OSSproductName$. Read more about
-[Running $productName$ in Production](../running).
-
-# What’s Next?
-
-$productName$ has a comprehensive range of [features](/features/) to
-support the requirements of any edge microservice. To learn more about how $productName$ works, along with use cases, best practices, and more,
-check out the [Welcome page](../../tutorials/getting-started) or read the [$productName$
-Story](../../about/why-ambassador).
diff --git a/content/en/docs/2.5/topics/install/migrate-to-2-alternate.md b/content/en/docs/2.5/topics/install/migrate-to-2-alternate.md
index d0b791a1..ff958ce9 100644
--- a/content/en/docs/2.5/topics/install/migrate-to-2-alternate.md
+++ b/content/en/docs/2.5/topics/install/migrate-to-2-alternate.md
@@ -1,36 +1,37 @@
-import Alert from '@material-ui/lab/Alert';
+---
+title: Migrate to Emissary 2.x
+description: "Instructions for how to upgrade Emissary to 2.x. Transfer your current configuration of Ambassador Edge Stack or Emissary to 2.x"
+---
-# Upgrading $productName$ with a separate cluster
-
-You can upgrade from any version of $AESproductName$ or $OSSproductName$ to
+You can upgrade from any version of Ambassador Edge Stack or Emissary to
any version of either by installing the new version in a new Kubernetes cluster,
then copying over configuration as needed. This is the way to be absolutely
certain that each installation cannot affect the other: it is extremely safe,
but is also significantly more effort.
-For example, to upgrade from some other version of $AESproductName$ or
-$OSSproductName$ to $productName$ $version$:
+For example, to upgrade from some other version of Ambassador Edge Stack or
+Emissary to Emissary $version$:
-1. Install $productName$ $version$ in a completely new cluster.
+1. Install Emissary $version$ in a completely new cluster.
-2. **Create `Listener`s for $productName$ $version$.**
+2. **Create `Listener`s for Emissary $version$.**
- When $productName$ $version$ starts, it will not have any `Listener`s, and it will not
- create any. You must create `Listener` resources by hand, or $productName$ $version$
+ When Emissary $version$ starts, it will not have any `Listener`s, and it will not
+ create any. You must create `Listener` resources by hand, or Emissary $version$
will not listen on any ports.
-3. Copy the entire configuration from the $productName$ 1.X cluster to the $productName$
+3. Copy the entire configuration from the Emissary 1.X cluster to the Emissary
$version$ cluster. This is most simply done with `kubectl get -o yaml | kubectl apply -f -`.
- This will create `getambassador.io/v2` resources in the $productName$ $version$ cluster.
- $productName$ $version$ will translate them internally to `getambassador.io/v3alpha1`
+ This will create `getambassador.io/v2` resources in the Emissary $version$ cluster.
+ Emissary $version$ will translate them internally to `getambassador.io/v3alpha1`
resources.
-4. Each $productName$ instance has its own cluster, so you can test the new
+4. Each Emissary instance has its own cluster, so you can test the new
instance without disrupting traffic to the existing instance.
5. If you need to make changes, you can change the `getambassador.io/v2` resource, or convert the
resource you're changing to `getambassador.io/v3alpha1` by using `kubectl edit`.
-6. Once everything is working with both versions, transfer incoming traffic to the $productName$
+6. Once everything is working with both versions, transfer incoming traffic to the Emissary
$version$ cluster.
diff --git a/content/en/docs/2.5/topics/install/migration-matrix.md b/content/en/docs/2.5/topics/install/migration-matrix.md
index b4f658ac..54dae07d 100644
--- a/content/en/docs/2.5/topics/install/migration-matrix.md
+++ b/content/en/docs/2.5/topics/install/migration-matrix.md
@@ -1,42 +1,42 @@
-import Alert from '@material-ui/lab/Alert';
-
-# Upgrading $productName$
+---
+title: Migration Matrix
+---
Read the instructions below before making any changes to your cluster!
-There are currently multiple paths for upgrading $productName$, depending on what version you're currently
-running, what you want to be running, and whether you installed $productName$ using [Helm](../helm) or
+There are currently multiple paths for upgrading Emissary, depending on what version you're currently
+running, what you want to be running, and whether you installed Emissary using [Helm](../helm) or
YAML.
-(To check out if you installed $productName$ using Helm, run `helm list --all` and see if
-$productName$ is listed. If so, you installed using Helm.)
+(To check out if you installed Emissary using Helm, run `helm list --all` and see if
+Emissary is listed. If so, you installed using Helm.)
Read the instructions below before making any changes to your cluster!
-## If you are currently running $AESproductName$
+## If you are currently running Ambassador Edge Stack
-See the [instructions on updating $AESproductName$](../../../../../edge-stack/$aesDocsVersion$/topics/install/migration-matrix).
+See the [instructions on updating Ambassador Edge Stack](../../../../../edge-stack/$aesDocsVersion$/topics/install/migration-matrix).
-## If you installed $OSSproductName$ using Helm
+## If you installed Emissary using Helm
| If you're running. | You can upgrade to |
|----------------------------------|----------------------------------------------------------------------------------------------------------------------------|
-| $OSSproductName$ $version$ | [$AESproductName$ $aesVersion$](/docs/edge-stack/$aesDocsVersion$/topics/install/upgrade/helm/emissary-2.5/edge-stack-2.5) |
-| $OSSproductName$ 2.4.X | [$OSSproductName$ $version$](../upgrade/helm/emissary-2.4/emissary-2.5) |
-| $OSSproductName$ 2.0.5 | [$OSSproductName$ $version$](../upgrade/helm/emissary-2.0/emissary-2.5) |
-| $OSSproductName$ 1.14.X | [$OSSproductName$ $version$](../upgrade/helm/emissary-1.14/emissary-2.5) |
-| $OSSproductName$ prior to 1.14.X | [$OSSproductName$ 1.14.X](../../../../1.14/topics/install/upgrading) |
+| Emissary $version$ | [Ambassador Edge Stack $aesVersion$](/docs/edge-stack/$aesDocsVersion$/topics/install/upgrade/helm/emissary-2.5/edge-stack-2.5) |
+| Emissary 2.4.X | [Emissary $version$](../upgrade/helm/emissary-2.4/emissary-2.5) |
+| Emissary 2.0.5 | [Emissary $version$](../upgrade/helm/emissary-2.0/emissary-2.5) |
+| Emissary 1.14.X | [Emissary $version$](../upgrade/helm/emissary-1.14/emissary-2.5) |
+| Emissary prior to 1.14.X | [Emissary 1.14.X](../../../../1.14/topics/install/upgrading) |
-## If you installed $OSSproductName$ manually by applying YAML
+## If you installed Emissary manually by applying YAML
| If you're running. | You can upgrade to |
|----------------------------------|----------------------------------------------------------------------------------------------------------------------------|
-| $OSSproductName$ $version$ | [$AESproductName$ $aesVersion$](/docs/edge-stack/$aesDocsVersion$/topics/install/upgrade/yaml/emissary-2.5/edge-stack-2.5) |
-| $OSSproductName$ 2.4.X | [$OSSproductName$ $version$](../upgrade/yaml/emissary-2.4/emissary-2.5) |
-| $OSSproductName$ 2.0.5 | [$OSSproductName$ $version$](../upgrade/yaml/emissary-2.0/emissary-2.5) |
-| $OSSproductName$ 1.14.X | [$OSSproductName$ $version$](../upgrade/yaml/emissary-1.14/emissary-2.5) |
-| $OSSproductName$ prior to 1.14.X | [$OSSproductName$ 1.14.X](../../../../1.14/topics/install/upgrading) |
+| Emissary $version$ | [Ambassador Edge Stack $aesVersion$](/docs/edge-stack/$aesDocsVersion$/topics/install/upgrade/yaml/emissary-2.5/edge-stack-2.5) |
+| Emissary 2.4.X | [Emissary $version$](../upgrade/yaml/emissary-2.4/emissary-2.5) |
+| Emissary 2.0.5 | [Emissary $version$](../upgrade/yaml/emissary-2.0/emissary-2.5) |
+| Emissary 1.14.X | [Emissary $version$](../upgrade/yaml/emissary-1.14/emissary-2.5) |
+| Emissary prior to 1.14.X | [Emissary 1.14.X](../../../../1.14/topics/install/upgrading) |
diff --git a/content/en/docs/2.5/topics/install/upgrade/_index.md b/content/en/docs/2.5/topics/install/upgrade/_index.md
new file mode 100644
index 00000000..65f73d96
--- /dev/null
+++ b/content/en/docs/2.5/topics/install/upgrade/_index.md
@@ -0,0 +1,4 @@
+---
+title: Upgrade
+weight: -10
+---
diff --git a/content/en/docs/2.5/topics/install/upgrade/helm/_index.md b/content/en/docs/2.5/topics/install/upgrade/helm/_index.md
new file mode 100644
index 00000000..a7e3d4b1
--- /dev/null
+++ b/content/en/docs/2.5/topics/install/upgrade/helm/_index.md
@@ -0,0 +1,3 @@
+---
+title: Helm
+---
diff --git a/content/en/docs/2.5/topics/install/upgrade/helm/emissary-1.14/_index.md b/content/en/docs/2.5/topics/install/upgrade/helm/emissary-1.14/_index.md
new file mode 100644
index 00000000..a1248d01
--- /dev/null
+++ b/content/en/docs/2.5/topics/install/upgrade/helm/emissary-1.14/_index.md
@@ -0,0 +1,3 @@
+---
+title: 1.14
+---
diff --git a/content/en/docs/2.5/topics/install/upgrade/helm/emissary-1.14/emissary-2.5.md b/content/en/docs/2.5/topics/install/upgrade/helm/emissary-1.14/emissary-2.5.md
index dc4c9e41..3d7ec376 100644
--- a/content/en/docs/2.5/topics/install/upgrade/helm/emissary-1.14/emissary-2.5.md
+++ b/content/en/docs/2.5/topics/install/upgrade/helm/emissary-1.14/emissary-2.5.md
@@ -1,9 +1,9 @@
-import Alert from '@material-ui/lab/Alert';
-
-# Upgrade $productName$ 1.14.X to $productName$ $version$ (Helm)
+---
+title: 1.14.x to 2.x
+---
- This guide covers migrating from $productName$ 1.14.X to $productName$ $version$. If
+ This guide covers migrating from Emissary 1.14.X to Emissary $version$. If
this is not your exact situation, see the migration
matrix.
@@ -14,12 +14,12 @@ import Alert from '@material-ui/lab/Alert';
upgrade instructions.
-We're pleased to introduce $productName$ $version$! The 2.X family introduces a number of
-changes to allow $productName$ to more gracefully handle larger installations (including
+We're pleased to introduce Emissary $version$! The 2.X family introduces a number of
+changes to allow Emissary to more gracefully handle larger installations (including
multitenant or multiorganizational installations), reduce memory footprint, and improve
-performance. In keeping with [SemVer](https://semver.org), $productName$ 2.X introduces
+performance. In keeping with [SemVer](https://semver.org), Emissary 2.X introduces
some changes that aren't backward-compatible with 1.X. These changes are detailed in
-[Major Changes in $productName$ 2.X](../../../../../../about/changes-2.x/).
+[Major Changes in Emissary 2.X](../../../../../../about/changes-2.x/).
## Migration Overview
@@ -28,35 +28,35 @@ some changes that aren't backward-compatible with 1.X. These changes are detaile
cluster!
-The recommended strategy for migration is to run $productName$ 1.14 and $productName$
-$version$ side-by-side in the same cluster. This gives $productName$ $version$
-and $productName$ 1.14 access to all the same configuration resources, with some
+The recommended strategy for migration is to run Emissary 1.14 and Emissary
+$version$ side-by-side in the same cluster. This gives Emissary $version$
+and Emissary 1.14 access to all the same configuration resources, with some
important caveats:
-1. **$productName$ 1.14 will not see any `getambassador.io/v3alpha1` resources.**
+1. **Emissary 1.14 will not see any `getambassador.io/v3alpha1` resources.**
This is intentional; it provides a way to apply configuration only to
- $productName$ $version$, while not interfering with the operation of your
- $productName$ 1.14 installation.
+ Emissary $version$, while not interfering with the operation of your
+ Emissary 1.14 installation.
2. **If needed, you can use labels to further isolate configurations.**
- If you need to prevent your $productName$ $version$ installation from
- seeing a particular bit of $productName$ 1.14 configuration, you can apply
+ If you need to prevent your Emissary $version$ installation from
+ seeing a particular bit of Emissary 1.14 configuration, you can apply
a Kubernetes label to the configuration resources that should be seen by
- your $productName$ $version$ installation, then set its
+ your Emissary $version$ installation, then set its
`AMBASSADOR_LABEL_SELECTOR` environment variable to restrict its configuration
to only the labelled resources.
For example, you could apply a `version-two: true` label to all resources
- that should be visible to $productName$ $version$, then set
+ that should be visible to Emissary $version$, then set
`AMBASSADOR_LABEL_SELECTOR=version-two=true` in its Deployment.
3. **Be careful about label selectors on Kubernetes Services!**
- If you have services in $productName$ 1.14 that use selectors that will match
- Pods from $productName$ $version$, traffic will be erroneously split between
- $productName$ 1.14 and $productName$ $version$. The labels used by $productName$
+ If you have services in Emissary 1.14 that use selectors that will match
+ Pods from Emissary $version$, traffic will be erroneously split between
+ Emissary 1.14 and Emissary $version$. The labels used by Emissary
$version$ include:
```yaml
@@ -68,20 +68,20 @@ important caveats:
profile: main
```
-4. **Be careful to only have one $productName$ Agent running at a time.**
+4. **Be careful to only have one Emissary Agent running at a time.**
- The $productName$ Agent is responsible for communications between
- $productName$ and Ambassador Cloud. If multiple versions of the Agent are
+ The Emissary Agent is responsible for communications between
+ Emissary and Ambassador Cloud. If multiple versions of the Agent are
running simultaneously, Ambassador Cloud could see conflicting information
about your cluster.
The best way to avoid multiple agents when installing with Helm is to use
`--set agent.enabled=false` to tell Helm not to install a new Agent with
- $productName$ $version$. Once testing is done, you can switch Agents safely.
+ Emissary $version$. Once testing is done, you can switch Agents safely.
-You can also migrate by [installing $productName$ $version$ in a separate cluster](../../../../migrate-to-2-alternate).
-This permits absolute certainty that your $productName$ 1.14 configuration will not be
-affected by changes meant for $productName$ $version$, and it eliminates concerns about
+You can also migrate by [installing Emissary $version$ in a separate cluster](../../../../migrate-to-2-alternate).
+This permits absolute certainty that your Emissary 1.14 configuration will not be
+affected by changes meant for Emissary $version$, and it eliminates concerns about
ACME, but it is more effort.
## Side-by-Side Migration Steps
@@ -90,7 +90,7 @@ Migration is a seven-step process:
1. **Make sure that older configuration resources are not present.**
- $productName$ 2.X does not support `getambassador.io/v0` or `getambassador.io/v1`
+ Emissary 2.X does not support `getambassador.io/v0` or `getambassador.io/v1`
resources, and Kubernetes will not permit removing support for CRD versions that are
still in use for stored resources. To verify that no resources older than
`getambassador.io/v2` are active, run
@@ -106,10 +106,10 @@ Migration is a seven-step process:
2. **Install new CRDs.**
- Before installing $productName$ $version$ itself, you must configure your
+ Before installing Emissary $version$ itself, you must configure your
Kubernetes cluster to support its new `getambassador.io/v3alpha1` configuration
resources. Note that `getambassador.io/v2` resources are still supported, but **you
- must install support for `getambassador.io/v3alpha1`** to run $productName$ $version$,
+ must install support for `getambassador.io/v3alpha1`** to run Emissary $version$,
even if you intend to continue using only `getambassador.io/v2` resources for some
time.
@@ -119,9 +119,9 @@ Migration is a seven-step process:
```
- $productName$ $version$ includes a Deployment in the `emissary-system` namespace
+ Emissary $version$ includes a Deployment in the `emissary-system` namespace
called emissary-apiext
. This is the APIserver extension
- that supports converting $productName$ CRDs between getambassador.io/v2
+ that supports converting Emissary CRDs between getambassador.io/v2
and getambassador.io/v3alpha1
. This Deployment needs to be running at
all times.
@@ -133,14 +133,14 @@ Migration is a seven-step process:
- There is a known issue with the emissary-apiext
service that impacts all $productName$ 2.x and 3.x users. Specifically, the TLS certificate used by apiext expires one year after creation and does not auto-renew. All users who are running $productName$/$AESproductName$ 2.x or 3.x with the apiext service should proactively renew their certificate as soon as practical by running kubectl delete --all secrets --namespace=emissary-system
to delete the existing certificate, and then restart the emissary-apiext
deployment with kubectl rollout restart deploy/emissary-apiext -n emissary-system
.
+ There is a known issue with the emissary-apiext
service that impacts all Emissary 2.x and 3.x users. Specifically, the TLS certificate used by apiext expires one year after creation and does not auto-renew. All users who are running Emissary/Ambassador Edge Stack 2.x or 3.x with the apiext service should proactively renew their certificate as soon as practical by running kubectl delete --all secrets --namespace=emissary-system
to delete the existing certificate, and then restart the emissary-apiext
deployment with kubectl rollout restart deploy/emissary-apiext -n emissary-system
.
This will create a new certificate with a one year expiration. We will issue a software patch to address this issue well before the one year expiration. Note that certificate renewal will not cause any downtime.
-3. **Install $productName$ $version$.**
+3. **Install Emissary $version$.**
- After installing the new CRDs, you need to install $productName$ $version$ itself
- **in the same namespace as your existing $productName$ 1.14 installation**. It's important
+ After installing the new CRDs, you need to install Emissary $version$ itself
+ **in the same namespace as your existing Emissary 1.14 installation**. It's important
to use the same namespace so that the two installations can see the same secrets, etc.
Start by making sure that your `emissary` Helm repo is set correctly:
@@ -151,8 +151,8 @@ Migration is a seven-step process:
helm repo update
```
- Typically, $productName$ 1.14 was installed in the `ambassador` namespace. If you installed
- $productName$ 1.14 in a different namespace, change the namespace in the commands below.
+ Typically, Emissary 1.14 was installed in the `ambassador` namespace. If you installed
+ Emissary 1.14 in a different namespace, change the namespace in the commands below.
- If you do not need to set `AMBASSADOR_LABEL_SELECTOR`:
@@ -174,14 +174,14 @@ Migration is a seven-step process:
```
- You must use the $productHelmName$
Helm chart for $productName$ 2.X.
+ You must use the $productHelmName$
Helm chart for Emissary 2.X.
Do not use the ambassador
Helm chart.
- $productName$ $version$ includes a Deployment in the $productNamespace$ namespace
+ Emissary $version$ includes a Deployment in the $productNamespace$ namespace
called emissary-apiext
. This is the APIserver extension
- that supports converting $productName$ CRDs between getambassador.io/v2
+ that supports converting Emissary CRDs between getambassador.io/v2
and getambassador.io/v3alpha1
. This Deployment needs to be running at
all times.
@@ -194,9 +194,9 @@ Migration is a seven-step process:
4. **Install `Listener`s and `Host`s as needed.**
- An important difference between $productName$ 1.14 and $productName$ $version$ is the
+ An important difference between Emissary 1.14 and Emissary $version$ is the
new **mandatory** `Listener` CRD. Also, when running both installations side by side,
- you will need to make sure that a `Host` is present for the new $productName$ $version$
+ you will need to make sure that a `Host` is present for the new Emissary $version$
Service. For example:
```bash
@@ -237,15 +237,15 @@ Migration is a seven-step process:
EOF
```
- This example requires that you know the hostname for the $productName$ Service (`$EMISSARY_HOSTNAME`)
+ This example requires that you know the hostname for the Emissary Service (`$EMISSARY_HOSTNAME`)
and that you have created a TLS Secret for it in `$EMISSARY_TLS_SECRET`.
5. **Test!**
- Your $productName$ $version$ installation can support the `getambassador.io/v2`
- configuration resources used by $productName$ 1.14, but you may need to make some
+ Your Emissary $version$ installation can support the `getambassador.io/v2`
+ configuration resources used by Emissary 1.14, but you may need to make some
changes to the configuration, as detailed in the documentation on
- [configuring $productName$ Communications](../../../../../../howtos/configure-communications)
+ [configuring Emissary Communications](../../../../../../howtos/configure-communications)
and [updating CRDs to `getambassador.io/v3alpha1`](../../../../convert-to-v3alpha1).
@@ -253,24 +253,24 @@ Migration is a seven-step process:
with the same name as a getambassador.io/v2
resource or vice versa: only
one version can be stored at a time.
- If you find that your $productName$ $version$ installation and your $productName$ 1.14
+ If you find that your Emissary $version$ installation and your Emissary 1.14
installation absolutely must have resources that are only seen by one version or the
other way, see overview section 2, "If needed, you can use labels to further isolate configurations".
**If you find that you need to roll back**, just reinstall your 1.14 CRDs and delete your
- installation of $productName$ $version$.
+ installation of Emissary $version$.
-6. **When ready, switch over to $productName$ $version$.**
+6. **When ready, switch over to Emissary $version$.**
- You can run $productName$ 1.14 and $productName$ $version$ side-by-side as long as you care
- to. However, taking full advantage of $productName$ 2.X's capabilities **requires**
+ You can run Emissary 1.14 and Emissary $version$ side-by-side as long as you care
+ to. However, taking full advantage of Emissary 2.X's capabilities **requires**
[updating your configuration to use `getambassador.io/v3alpha1` configuration resources](../../../../convert-to-v3alpha1),
- since some useful features in $productName$ $version$ are only available using
+ since some useful features in Emissary $version$ are only available using
`getambassador.io/v3alpha1` resources.
- When you're ready to have $productName$ $version$ handle traffic on its own, switch
- your original $productName$ 1.14 Service to point to $productName$ $version$. Use
+ When you're ready to have Emissary $version$ handle traffic on its own, switch
+ your original Emissary 1.14 Service to point to Emissary $version$. Use
`kubectl edit service ambassador` and change the `selectors` to:
```
@@ -282,7 +282,7 @@ Migration is a seven-step process:
Repeat using `kubectl edit service ambassador-admin` for the `ambassador-admin`
Service.
-7. **Finally, install the $productName$ $version$ Ambassador Agent.**
+7. **Finally, install the Emissary $version$ Ambassador Agent.**
First, scale the 1.14 agent to 0:
@@ -300,13 +300,13 @@ Migration is a seven-step process:
kubectl rollout status -n $productNamespace$ deployment/$productDeploymentName$ -w
```
-Congratulations! At this point, $productName$ $version$ is fully running and it's safe to remove the `ambassador` and `ambassador-agent` Deployments:
+Congratulations! At this point, Emissary $version$ is fully running and it's safe to remove the `ambassador` and `ambassador-agent` Deployments:
```
kubectl delete deployment/ambassador deployment/ambassador-agent
```
-Once $productName$ 1.14 is no longer running, you may [convert](../../../../convert-to-v3alpha1)
+Once Emissary 1.14 is no longer running, you may [convert](../../../../convert-to-v3alpha1)
any remaining `getambassador.io/v2` resources to `getambassador.io/v3alpha1`.
You may also want to redirect DNS to the `edge-stack` Service and remove the
`ambassador` Service.
diff --git a/content/en/docs/2.5/topics/install/upgrade/helm/emissary-2.0/_index.md b/content/en/docs/2.5/topics/install/upgrade/helm/emissary-2.0/_index.md
new file mode 100644
index 00000000..a17e8935
--- /dev/null
+++ b/content/en/docs/2.5/topics/install/upgrade/helm/emissary-2.0/_index.md
@@ -0,0 +1,3 @@
+---
+title: 2.0
+---
diff --git a/content/en/docs/2.5/topics/install/upgrade/helm/emissary-2.0/emissary-2.5.md b/content/en/docs/2.5/topics/install/upgrade/helm/emissary-2.0/emissary-2.5.md
index 5d8f7e0d..3bcb295e 100644
--- a/content/en/docs/2.5/topics/install/upgrade/helm/emissary-2.0/emissary-2.5.md
+++ b/content/en/docs/2.5/topics/install/upgrade/helm/emissary-2.0/emissary-2.5.md
@@ -1,9 +1,9 @@
-import Alert from '@material-ui/lab/Alert';
-
-# Upgrade $productName$ 2.0.5 to $productName$ $version$ (Helm)
+---
+title: 2.0.x to latest 2.x
+---
- This guide covers migrating from $productName$ 2.0.5 to $productName$ $version$. If
+ This guide covers migrating from Emissary 2.0.5 to Emissary $version$. If
this is not your exact situation, see the migration
matrix.
@@ -14,15 +14,15 @@ import Alert from '@material-ui/lab/Alert';
upgrade instructions.
-Since $productName$'s configuration is entirely stored in Kubernetes resources, upgrading between minor
+Since Emissary's configuration is entirely stored in Kubernetes resources, upgrading between minor
versions is straightforward.
Migration is a two-step process:
1. **Install new CRDs.**
- Before installing $productName$ $version$ itself, you need to update the CRDs in
- your cluster; Helm will not do this for you. This is mandatory during any upgrade of $productName$.
+ Before installing Emissary $version$ itself, you need to update the CRDs in
+ your cluster; Helm will not do this for you. This is mandatory during any upgrade of Emissary.
```
kubectl apply -f https://app.getambassador.io/yaml/emissary/$version$/emissary-crds.yaml
@@ -30,9 +30,9 @@ Migration is a two-step process:
```
- $productName$ $version$ includes a Deployment in the `emissary-system` namespace
+ Emissary $version$ includes a Deployment in the `emissary-system` namespace
called emissary-apiext
. This is the APIserver extension
- that supports converting $productName$ CRDs between getambassador.io/v2
+ that supports converting Emissary CRDs between getambassador.io/v2
and getambassador.io/v3alpha1
. This Deployment needs to be running at
all times.
@@ -44,13 +44,13 @@ Migration is a two-step process:
- There is a known issue with the emissary-apiext
service that impacts all $productName$ 2.x and 3.x users. Specifically, the TLS certificate used by apiext expires one year after creation and does not auto-renew. All users who are running $productName$/$AESproductName$ 2.x or 3.x with the apiext service should proactively renew their certificate as soon as practical by running kubectl delete --all secrets --namespace=emissary-system
to delete the existing certificate, and then restart the emissary-apiext
deployment with kubectl rollout restart deploy/emissary-apiext -n emissary-system
.
+ There is a known issue with the emissary-apiext
service that impacts all Emissary 2.x and 3.x users. Specifically, the TLS certificate used by apiext expires one year after creation and does not auto-renew. All users who are running Emissary/Ambassador Edge Stack 2.x or 3.x with the apiext service should proactively renew their certificate as soon as practical by running kubectl delete --all secrets --namespace=emissary-system
to delete the existing certificate, and then restart the emissary-apiext
deployment with kubectl rollout restart deploy/emissary-apiext -n emissary-system
.
This will create a new certificate with a one year expiration. We will issue a software patch to address this issue well before the one year expiration. Note that certificate renewal will not cause any downtime.
-2. **Install $productName$ $version$.**
+2. **Install Emissary $version$.**
- After installing the new CRDs, use Helm to install $productName$ $version$. Start by
+ After installing the new CRDs, use Helm to install Emissary $version$. Start by
making sure that your `datawire` Helm repo is set correctly:
```bash
@@ -59,7 +59,7 @@ Migration is a two-step process:
helm repo update
```
- Then, update your $productName$ installation in the `$productNamespace$` namespace.
+ Then, update your Emissary installation in the `$productNamespace$` namespace.
If necessary for your installation (e.g. if you were running with
`AMBASSADOR_SINGLE_NAMESPACE` set), you can choose a different namespace.
@@ -70,6 +70,6 @@ Migration is a two-step process:
```
- You must use the $productHelmName$
Helm chart for $productName$ 2.X.
+ You must use the $productHelmName$
Helm chart for Emissary 2.X.
Do not use the ambassador
Helm chart.
diff --git a/content/en/docs/2.5/topics/install/upgrade/helm/emissary-2.4/_index.md b/content/en/docs/2.5/topics/install/upgrade/helm/emissary-2.4/_index.md
new file mode 100644
index 00000000..39dfcfd6
--- /dev/null
+++ b/content/en/docs/2.5/topics/install/upgrade/helm/emissary-2.4/_index.md
@@ -0,0 +1,3 @@
+---
+title: 2.4
+---
diff --git a/content/en/docs/2.5/topics/install/upgrade/helm/emissary-2.4/emissary-2.5.md b/content/en/docs/2.5/topics/install/upgrade/helm/emissary-2.4/emissary-2.5.md
index a438f20f..44015a28 100644
--- a/content/en/docs/2.5/topics/install/upgrade/helm/emissary-2.4/emissary-2.5.md
+++ b/content/en/docs/2.5/topics/install/upgrade/helm/emissary-2.4/emissary-2.5.md
@@ -1,9 +1,9 @@
-import Alert from '@material-ui/lab/Alert';
-
-# Upgrade $productName$ 2.4.X to $productName$ $version$ (Helm)
+---
+title: 2.4.x to latest 2.x
+---
- This guide covers migrating from $productName$ 2.4 to $productName$ $version$. If
+ This guide covers migrating from Emissary 2.4 to Emissary $version$. If
this is not your exact situation, see the migration
matrix.
@@ -14,15 +14,15 @@ import Alert from '@material-ui/lab/Alert';
upgrade instructions.
-Since $productName$'s configuration is entirely stored in Kubernetes resources, upgrading between minor
+Since Emissary's configuration is entirely stored in Kubernetes resources, upgrading between minor
versions is straightforward.
Migration is a two-step process:
1. **Install new CRDs.**
- Before installing $productName$ $version$ itself, you need to update the CRDs in
- your cluster; Helm will not do this for you. This is mandatory during any upgrade of $productName$.
+ Before installing Emissary $version$ itself, you need to update the CRDs in
+ your cluster; Helm will not do this for you. This is mandatory during any upgrade of Emissary.
```
kubectl apply -f https://app.getambassador.io/yaml/emissary/$version$/emissary-crds.yaml
@@ -30,9 +30,9 @@ Migration is a two-step process:
```
- $productName$ $version$ includes a Deployment in the `emissary-system` namespace
+ Emissary $version$ includes a Deployment in the `emissary-system` namespace
called emissary-apiext
. This is the APIserver extension
- that supports converting $productName$ CRDs between getambassador.io/v2
+ that supports converting Emissary CRDs between getambassador.io/v2
and getambassador.io/v3alpha1
. This Deployment needs to be running at
all times.
@@ -44,13 +44,13 @@ Migration is a two-step process:
- There is a known issue with the emissary-apiext
service that impacts all $productName$ 2.x and 3.x users. Specifically, the TLS certificate used by apiext expires one year after creation and does not auto-renew. All users who are running $productName$/$AESproductName$ 2.x or 3.x with the apiext service should proactively renew their certificate as soon as practical by running kubectl delete --all secrets --namespace=emissary-system
to delete the existing certificate, and then restart the emissary-apiext
deployment with kubectl rollout restart deploy/emissary-apiext -n emissary-system
.
+ There is a known issue with the emissary-apiext
service that impacts all Emissary 2.x and 3.x users. Specifically, the TLS certificate used by apiext expires one year after creation and does not auto-renew. All users who are running Emissary/Ambassador Edge Stack 2.x or 3.x with the apiext service should proactively renew their certificate as soon as practical by running kubectl delete --all secrets --namespace=emissary-system
to delete the existing certificate, and then restart the emissary-apiext
deployment with kubectl rollout restart deploy/emissary-apiext -n emissary-system
.
This will create a new certificate with a one year expiration. We will issue a software patch to address this issue well before the one year expiration. Note that certificate renewal will not cause any downtime.
-2. **Install $productName$ $version$.**
+2. **Install Emissary $version$.**
- After installing the new CRDs, use Helm to install $productName$ $version$. Start by
+ After installing the new CRDs, use Helm to install Emissary $version$. Start by
making sure that your `datawire` Helm repo is set correctly:
```bash
@@ -59,7 +59,7 @@ Migration is a two-step process:
helm repo update
```
- Then, update your $productName$ installation in the `$productNamespace$` namespace.
+ Then, update your Emissary installation in the `$productNamespace$` namespace.
If necessary for your installation (e.g. if you were running with
`AMBASSADOR_SINGLE_NAMESPACE` set), you can choose a different namespace.
@@ -70,6 +70,6 @@ Migration is a two-step process:
```
- You must use the $productHelmName$
Helm chart for $productName$ 2.X.
+ You must use the $productHelmName$
Helm chart for Emissary 2.X.
Do not use the ambassador
Helm chart.
diff --git a/content/en/docs/2.5/topics/install/upgrade/yaml/_index.md b/content/en/docs/2.5/topics/install/upgrade/yaml/_index.md
new file mode 100644
index 00000000..07ce4fef
--- /dev/null
+++ b/content/en/docs/2.5/topics/install/upgrade/yaml/_index.md
@@ -0,0 +1,3 @@
+---
+title: YAML
+---
diff --git a/content/en/docs/2.5/topics/install/upgrade/yaml/emissary-1.14/_index.md b/content/en/docs/2.5/topics/install/upgrade/yaml/emissary-1.14/_index.md
new file mode 100644
index 00000000..a1248d01
--- /dev/null
+++ b/content/en/docs/2.5/topics/install/upgrade/yaml/emissary-1.14/_index.md
@@ -0,0 +1,3 @@
+---
+title: 1.14
+---
diff --git a/content/en/docs/2.5/topics/install/upgrade/yaml/emissary-1.14/emissary-2.5.md b/content/en/docs/2.5/topics/install/upgrade/yaml/emissary-1.14/emissary-2.5.md
index 449d0565..4719e4a5 100644
--- a/content/en/docs/2.5/topics/install/upgrade/yaml/emissary-1.14/emissary-2.5.md
+++ b/content/en/docs/2.5/topics/install/upgrade/yaml/emissary-1.14/emissary-2.5.md
@@ -1,9 +1,9 @@
-import Alert from '@material-ui/lab/Alert';
-
-# Upgrade $productName$ 1.14.X to $productName$ $version$ (YAML)
+---
+title: 1.14 to latest 2.x
+---
- This guide covers migrating from $productName$ 1.14.X to $productName$ $version$. If
+ This guide covers migrating from Emissary 1.14.X to Emissary $version$. If
this is not your exact situation, see the migration
matrix.
@@ -14,12 +14,12 @@ import Alert from '@material-ui/lab/Alert';
upgrade instructions.
-We're pleased to introduce $productName$ $version$! The 2.X family introduces a number of
-changes to allow $productName$ to more gracefully handle larger installations (including
+We're pleased to introduce Emissary $version$! The 2.X family introduces a number of
+changes to allow Emissary to more gracefully handle larger installations (including
multitenant or multiorganizational installations), reduce memory footprint, and improve
-performance. In keeping with [SemVer](https://semver.org), $productName$ 2.X introduces
+performance. In keeping with [SemVer](https://semver.org), Emissary 2.X introduces
some changes that aren't backward-compatible with 1.X. These changes are detailed in
-[Major Changes in $productName$ 2.X](../../../../../../about/changes-2.x/).
+[Major Changes in Emissary 2.X](../../../../../../about/changes-2.x/).
## Migration Overview
@@ -28,35 +28,35 @@ some changes that aren't backward-compatible with 1.X. These changes are detaile
cluster!
-The recommended strategy for migration is to run $productName$ 1.14 and $productName$
-$version$ side-by-side in the same cluster. This gives $productName$ $version$
-and $productName$ 1.14 access to all the same configuration resources, with some
+The recommended strategy for migration is to run Emissary 1.14 and Emissary
+$version$ side-by-side in the same cluster. This gives Emissary $version$
+and Emissary 1.14 access to all the same configuration resources, with some
important caveats:
-1. **$productName$ 1.14 will not see any `getambassador.io/v3alpha1` resources.**
+1. **Emissary 1.14 will not see any `getambassador.io/v3alpha1` resources.**
This is intentional; it provides a way to apply configuration only to
- $productName$ $version$, while not interfering with the operation of your
- $productName$ 1.14 installation.
+ Emissary $version$, while not interfering with the operation of your
+ Emissary 1.14 installation.
2. **If needed, you can use labels to further isolate configurations.**
- If you need to prevent your $productName$ $version$ installation from
- seeing a particular bit of $productName$ 1.14 configuration, you can apply
+ If you need to prevent your Emissary $version$ installation from
+ seeing a particular bit of Emissary 1.14 configuration, you can apply
a Kubernetes label to the configuration resources that should be seen by
- your $productName$ $version$ installation, then set its
+ your Emissary $version$ installation, then set its
`AMBASSADOR_LABEL_SELECTOR` environment variable to restrict its configuration
to only the labelled resources.
For example, you could apply a `version-two: true` label to all resources
- that should be visible to $productName$ $version$, then set
+ that should be visible to Emissary $version$, then set
`AMBASSADOR_LABEL_SELECTOR=version-two=true` in its Deployment.
3. **Be careful about label selectors on Kubernetes Services!**
- If you have services in $productName$ 1.14 that use selectors that will match
- Pods from $productName$ $version$, traffic will be erroneously split between
- $productName$ 1.14 and $productName$ $version$. The labels used by $productName$
+ If you have services in Emissary 1.14 that use selectors that will match
+ Pods from Emissary $version$, traffic will be erroneously split between
+ Emissary 1.14 and Emissary $version$. The labels used by Emissary
$version$ include:
```yaml
@@ -68,20 +68,20 @@ important caveats:
profile: main
```
-4. **Be careful to only have one $productName$ Agent running at a time.**
+4. **Be careful to only have one Emissary Agent running at a time.**
- The $productName$ Agent is responsible for communications between
- $productName$ and Ambassador Cloud. If multiple versions of the Agent are
+ The Emissary Agent is responsible for communications between
+ Emissary and Ambassador Cloud. If multiple versions of the Agent are
running simultaneously, Ambassador Cloud could see conflicting information
about your cluster.
- The migration YAML used below to install $productName$ $version$ will not
+ The migration YAML used below to install Emissary $version$ will not
install a duplicate agent. If you are building your own YAML, make sure not
to include a duplicate agent.
-You can also migrate by [installing $productName$ $version$ in a separate cluster](../../../../migrate-to-2-alternate).
-This permits absolute certainty that your $productName$ 1.14 configuration will not be
-affected by changes meant for $productName$ $version$, and it eliminates concerns about
+You can also migrate by [installing Emissary $version$ in a separate cluster](../../../../migrate-to-2-alternate).
+This permits absolute certainty that your Emissary 1.14 configuration will not be
+affected by changes meant for Emissary $version$, and it eliminates concerns about
ACME, but it is more effort.
## Side-by-Side Migration Steps
@@ -90,7 +90,7 @@ Migration is a seven-step process:
1. **Make sure that older configuration resources are not present.**
- $productName$ 2.X does not support `getambassador.io/v0` or `getambassador.io/v1`
+ Emissary 2.X does not support `getambassador.io/v0` or `getambassador.io/v1`
resources, and Kubernetes will not permit removing support for CRD versions that are
still in use for stored resources. To verify that no resources older than
`getambassador.io/v2` are active, run
@@ -106,10 +106,10 @@ Migration is a seven-step process:
2. **Install new CRDs.**
- Before installing $productName$ $version$ itself, you must configure your
+ Before installing Emissary $version$ itself, you must configure your
Kubernetes cluster to support its new `getambassador.io/v3alpha1` configuration
resources. Note that `getambassador.io/v2` resources are still supported, but **you
- must install support for `getambassador.io/v3alpha1`** to run $productName$ $version$,
+ must install support for `getambassador.io/v3alpha1`** to run Emissary $version$,
even if you intend to continue using only `getambassador.io/v2` resources for some
time.
@@ -119,9 +119,9 @@ Migration is a seven-step process:
```
- $productName$ $version$ includes a Deployment in the `emissary-system` namespace
+ Emissary $version$ includes a Deployment in the `emissary-system` namespace
called emissary-apiext
. This is the APIserver extension
- that supports converting $productName$ CRDs between getambassador.io/v2
+ that supports converting Emissary CRDs between getambassador.io/v2
and getambassador.io/v3alpha1
. This Deployment needs to be running at
all times.
@@ -133,23 +133,23 @@ Migration is a seven-step process:
- There is a known issue with the emissary-apiext
service that impacts all $productName$ 2.x and 3.x users. Specifically, the TLS certificate used by apiext expires one year after creation and does not auto-renew. All users who are running $productName$/$AESproductName$ 2.x or 3.x with the apiext service should proactively renew their certificate as soon as practical by running kubectl delete --all secrets --namespace=emissary-system
to delete the existing certificate, and then restart the emissary-apiext
deployment with kubectl rollout restart deploy/emissary-apiext -n emissary-system
.
+ There is a known issue with the emissary-apiext
service that impacts all Emissary 2.x and 3.x users. Specifically, the TLS certificate used by apiext expires one year after creation and does not auto-renew. All users who are running Emissary/Ambassador Edge Stack 2.x or 3.x with the apiext service should proactively renew their certificate as soon as practical by running kubectl delete --all secrets --namespace=emissary-system
to delete the existing certificate, and then restart the emissary-apiext
deployment with kubectl rollout restart deploy/emissary-apiext -n emissary-system
.
This will create a new certificate with a one year expiration. We will issue a software patch to address this issue well before the one year expiration. Note that certificate renewal will not cause any downtime.
-3. **Install $productName$ $version$.**
+3. **Install Emissary $version$.**
- After installing the new CRDs, you need to install $productName$ $version$ itself
- **in the same namespace as your existing $productName$ 1.14 installation**. It's important
+ After installing the new CRDs, you need to install Emissary $version$ itself
+ **in the same namespace as your existing Emissary 1.14 installation**. It's important
to use the same namespace so that the two installations can see the same secrets, etc.
We publish two manifests for different namespaces. Use only the one that
- matches the namespace into which you installed $productName$ 1.14:
+ matches the namespace into which you installed Emissary 1.14:
- [`emissary-emissaryns.yaml`] for the `emissary` namespace; or
- [`emissary-defaultns.yaml`] for the `default` namespace.
- If you installed $productName$ 1.14 into some other namespace, you'll need to
+ If you installed Emissary 1.14 into some other namespace, you'll need to
download one of the files and edit it to match your namespace.
[`emissary-emissaryns.yaml`]: https://app.getambassador.io/yaml/emissary/$version$/emissary-emissaryns.yaml
@@ -166,9 +166,9 @@ Migration is a seven-step process:
```
- $productName$ $version$ includes a Deployment in the $productNamespace$ namespace
+ Emissary $version$ includes a Deployment in the $productNamespace$ namespace
called emissary-apiext
. This is the APIserver extension
- that supports converting $productName$ CRDs between getambassador.io/v2
+ that supports converting Emissary CRDs between getambassador.io/v2
and getambassador.io/v3alpha1
. This Deployment needs to be running at
all times.
@@ -181,9 +181,9 @@ Migration is a seven-step process:
4. **Install `Listener`s and `Host`s as needed.**
- An important difference between $productName$ 1.14 and $productName$ $version$ is the
+ An important difference between Emissary 1.14 and Emissary $version$ is the
new **mandatory** `Listener` CRD. Also, when running both installations side by side,
- you will need to make sure that a `Host` is present for the new $productName$ $version$
+ you will need to make sure that a `Host` is present for the new Emissary $version$
Service. For example:
```bash
@@ -224,15 +224,15 @@ Migration is a seven-step process:
EOF
```
- This example requires that you know the hostname for the $productName$ Service (`$EMISSARY_HOSTNAME`)
+ This example requires that you know the hostname for the Emissary Service (`$EMISSARY_HOSTNAME`)
and that you have created a TLS Secret for it in `$EMISSARY_TLS_SECRET`.
5. **Test!**
- Your $productName$ $version$ installation can support the `getambassador.io/v2`
- configuration resources used by $productName$ 1.14, but you may need to make some
+ Your Emissary $version$ installation can support the `getambassador.io/v2`
+ configuration resources used by Emissary 1.14, but you may need to make some
changes to the configuration, as detailed in the documentation on
- [configuring $productName$ Communications](../../../../../../howtos/configure-communications)
+ [configuring Emissary Communications](../../../../../../howtos/configure-communications)
and [updating CRDs to `getambassador.io/v3alpha1`](../../../../convert-to-v3alpha1).
@@ -240,24 +240,24 @@ Migration is a seven-step process:
with the same name as a getambassador.io/v2
resource or vice versa: only
one version can be stored at a time.
- If you find that your $productName$ $version$ installation and your $productName$ 1.14
+ If you find that your Emissary $version$ installation and your Emissary 1.14
installation absolutely must have resources that are only seen by one version or the
other way, see overview section 2, "If needed, you can use labels to further isolate configurations".
**If you find that you need to roll back**, just reinstall your 1.14 CRDs and delete your
- installation of $productName$ $version$.
+ installation of Emissary $version$.
-6. **When ready, switch over to $productName$ $version$.**
+6. **When ready, switch over to Emissary $version$.**
- You can run $productName$ 1.14 and $productName$ $version$ side-by-side as long as you care
- to. However, taking full advantage of $productName$ 2.X's capabilities **requires**
+ You can run Emissary 1.14 and Emissary $version$ side-by-side as long as you care
+ to. However, taking full advantage of Emissary 2.X's capabilities **requires**
[updating your configuration to use `getambassador.io/v3alpha1` configuration resources](../../../../convert-to-v3alpha1),
- since some useful features in $productName$ $version$ are only available using
+ since some useful features in Emissary $version$ are only available using
`getambassador.io/v3alpha1` resources.
- When you're ready to have $productName$ $version$ handle traffic on its own, switch
- your original $productName$ 1.14 Service to point to $productName$ $version$. Use
+ When you're ready to have Emissary $version$ handle traffic on its own, switch
+ your original Emissary 1.14 Service to point to Emissary $version$. Use
`kubectl edit service ambassador` and change the `selectors` to:
```
@@ -269,7 +269,7 @@ Migration is a seven-step process:
Repeat using `kubectl edit service ambassador-admin` for the `ambassador-admin`
Service.
-7. **Finally, install the $productName$ $version$ Ambassador Agent.**
+7. **Finally, install the Emissary $version$ Ambassador Agent.**
First, scale the 1.14 agent to 0:
@@ -280,12 +280,12 @@ Migration is a seven-step process:
Once that's done, install the new Agent into the same namespace as your
Emissary deployment. Again, we supply two files for two different
namespaces: use only the one that matches the namespace into which you
- installed $productName$ 1.14.
+ installed Emissary 1.14.
- [`emissary-emissaryns-agent.yaml`] for the `emissary` namespace; or
- [`emissary-defaultns-agent.yaml`] for the `default` namespace.
- If you installed $productName$ 1.14 into some other namespace, you'll need to
+ If you installed Emissary 1.14 into some other namespace, you'll need to
download one of the files and edit it to match your namespace.
[`emissary-emissaryns-agent.yaml`]: https://app.getambassador.io/yaml/emissary/$version$/emissary-emissaryns-agent.yaml
@@ -297,13 +297,13 @@ Migration is a seven-step process:
kubectl apply -f https://app.getambassador.io/yaml/emissary/$version$/emissary-defaultns-agent.yaml
```
-Congratulations! At this point, $productName$ $version$ is fully running and it's safe to remove the `ambassador` and `ambassador-agent` Deployments:
+Congratulations! At this point, Emissary $version$ is fully running and it's safe to remove the `ambassador` and `ambassador-agent` Deployments:
```
kubectl delete deployment/ambassador deployment/ambassador-agent
```
-Once $productName$ 1.14 is no longer running, you may [convert](../../../../convert-to-v3alpha1)
+Once Emissary 1.14 is no longer running, you may [convert](../../../../convert-to-v3alpha1)
any remaining `getambassador.io/v2` resources to `getambassador.io/v3alpha1`.
You may also want to redirect DNS to the `edge-stack` Service and remove the
`ambassador` Service.
diff --git a/content/en/docs/2.5/topics/install/upgrade/yaml/emissary-2.0/_index.md b/content/en/docs/2.5/topics/install/upgrade/yaml/emissary-2.0/_index.md
new file mode 100644
index 00000000..a17e8935
--- /dev/null
+++ b/content/en/docs/2.5/topics/install/upgrade/yaml/emissary-2.0/_index.md
@@ -0,0 +1,3 @@
+---
+title: 2.0
+---
diff --git a/content/en/docs/2.5/topics/install/upgrade/yaml/emissary-2.0/emissary-2.5.md b/content/en/docs/2.5/topics/install/upgrade/yaml/emissary-2.0/emissary-2.5.md
index df4663b2..8c0c4ef5 100644
--- a/content/en/docs/2.5/topics/install/upgrade/yaml/emissary-2.0/emissary-2.5.md
+++ b/content/en/docs/2.5/topics/install/upgrade/yaml/emissary-2.0/emissary-2.5.md
@@ -1,9 +1,9 @@
-import Alert from '@material-ui/lab/Alert';
-
-# Upgrade $productName$ 2.0.5 to $productName$ $version$ (YAML)
+---
+title: 2.0 to latest 2.x
+---
- This guide covers migrating from $productName$ 2.0.5 to $productName$ $version$. If
+ This guide covers migrating from Emissary 2.0.5 to Emissary $version$. If
this is not your exact situation, see the migration
matrix.
@@ -14,15 +14,15 @@ import Alert from '@material-ui/lab/Alert';
upgrade instructions.
-Since $productName$'s configuration is entirely stored in Kubernetes resources, upgrading between minor
+Since Emissary's configuration is entirely stored in Kubernetes resources, upgrading between minor
versions is straightforward.
Migration is a two-step process:
1. **Install new CRDs.**
- Before installing $productName$ $version$ itself, you need to update the CRDs in
- your cluster. This is mandatory during any upgrade of $productName$.
+ Before installing Emissary $version$ itself, you need to update the CRDs in
+ your cluster. This is mandatory during any upgrade of Emissary.
```
kubectl apply -f https://app.getambassador.io/yaml/emissary/$version$/emissary-crds.yaml
@@ -30,9 +30,9 @@ Migration is a two-step process:
```
- $productName$ $version$ includes a Deployment in the `emissary-system` namespace
+ Emissary $version$ includes a Deployment in the `emissary-system` namespace
called emissary-apiext
. This is the APIserver extension
- that supports converting $productName$ CRDs between getambassador.io/v2
+ that supports converting Emissary CRDs between getambassador.io/v2
and getambassador.io/v3alpha1
. This Deployment needs to be running at
all times.
@@ -44,17 +44,17 @@ Migration is a two-step process:
- There is a known issue with the emissary-apiext
service that impacts all $productName$ 2.x and 3.x users. Specifically, the TLS certificate used by apiext expires one year after creation and does not auto-renew. All users who are running $productName$/$AESproductName$ 2.x or 3.x with the apiext service should proactively renew their certificate as soon as practical by running kubectl delete --all secrets --namespace=emissary-system
to delete the existing certificate, and then restart the emissary-apiext
deployment with kubectl rollout restart deploy/emissary-apiext -n emissary-system
.
+ There is a known issue with the emissary-apiext
service that impacts all Emissary 2.x and 3.x users. Specifically, the TLS certificate used by apiext expires one year after creation and does not auto-renew. All users who are running Emissary/Ambassador Edge Stack 2.x or 3.x with the apiext service should proactively renew their certificate as soon as practical by running kubectl delete --all secrets --namespace=emissary-system
to delete the existing certificate, and then restart the emissary-apiext
deployment with kubectl rollout restart deploy/emissary-apiext -n emissary-system
.
This will create a new certificate with a one year expiration. We will issue a software patch to address this issue well before the one year expiration. Note that certificate renewal will not cause any downtime.
-2. **Install $productName$ $version$.**
+2. **Install Emissary $version$.**
- After installing the new CRDs, upgrade $productName$ $version$.
+ After installing the new CRDs, upgrade Emissary $version$.
Our emissary-emissaryns.yaml
file
- uses the `emissary` namespace, since this is the default for $productName$.
+ uses the `emissary` namespace, since this is the default for Emissary.
We also publish emissary-defaultns.yaml
for the
`default` namespace. For any other namespace, you should download one of these files and edit the namespaces manually.
diff --git a/content/en/docs/2.5/topics/install/upgrade/yaml/emissary-2.3/_index.md b/content/en/docs/2.5/topics/install/upgrade/yaml/emissary-2.3/_index.md
new file mode 100644
index 00000000..e6730521
--- /dev/null
+++ b/content/en/docs/2.5/topics/install/upgrade/yaml/emissary-2.3/_index.md
@@ -0,0 +1,3 @@
+---
+title: 2.3
+---
diff --git a/content/en/docs/2.5/topics/install/upgrade/yaml/emissary-2.3/emissary-2.5.md b/content/en/docs/2.5/topics/install/upgrade/yaml/emissary-2.3/emissary-2.5.md
index 65018b74..1f5abbd7 100644
--- a/content/en/docs/2.5/topics/install/upgrade/yaml/emissary-2.3/emissary-2.5.md
+++ b/content/en/docs/2.5/topics/install/upgrade/yaml/emissary-2.3/emissary-2.5.md
@@ -1,9 +1,9 @@
-import Alert from '@material-ui/lab/Alert';
-
-# Upgrade $productName$ 2.4.X to $productName$ $version$ (YAML)
+---
+title: 2.3 to latest 2.x
+---
- This guide covers migrating from $productName$ 2.4 to $productName$ $version$. If
+ This guide covers migrating from Emissary 2.3 to Emissary $version$. If
this is not your exact situation, see the migration
matrix.
@@ -14,15 +14,15 @@ import Alert from '@material-ui/lab/Alert';
upgrade instructions.
-Since $productName$'s configuration is entirely stored in Kubernetes resources, upgrading between minor
+Since Emissary's configuration is entirely stored in Kubernetes resources, upgrading between minor
versions is straightforward.
Migration is a two-step process:
1. **Install new CRDs.**
- Before installing $productName$ $version$ itself, you need to update the CRDs in
- your cluster. This is mandatory during any upgrade of $productName$.
+ Before installing Emissary $version$ itself, you need to update the CRDs in
+ your cluster. This is mandatory during any upgrade of Emissary.
```
kubectl apply -f https://app.getambassador.io/yaml/emissary/$version$/emissary-crds.yaml
@@ -30,9 +30,9 @@ Migration is a two-step process:
```
- $productName$ $version$ includes a Deployment in the `emissary-system` namespace
+ Emissary $version$ includes a Deployment in the `emissary-system` namespace
called emissary-apiext
. This is the APIserver extension
- that supports converting $productName$ CRDs between getambassador.io/v2
+ that supports converting Emissary CRDs between getambassador.io/v2
and getambassador.io/v3alpha1
. This Deployment needs to be running at
all times.
@@ -44,17 +44,17 @@ Migration is a two-step process:
- There is a known issue with the emissary-apiext
service that impacts all $productName$ 2.x and 3.x users. Specifically, the TLS certificate used by apiext expires one year after creation and does not auto-renew. All users who are running $productName$/$AESproductName$ 2.x or 3.x with the apiext service should proactively renew their certificate as soon as practical by running kubectl delete --all secrets --namespace=emissary-system
to delete the existing certificate, and then restart the emissary-apiext
deployment with kubectl rollout restart deploy/emissary-apiext -n emissary-system
.
+ There is a known issue with the emissary-apiext
service that impacts all Emissary 2.x and 3.x users. Specifically, the TLS certificate used by apiext expires one year after creation and does not auto-renew. All users who are running Emissary/Ambassador Edge Stack 2.x or 3.x with the apiext service should proactively renew their certificate as soon as practical by running kubectl delete --all secrets --namespace=emissary-system
to delete the existing certificate, and then restart the emissary-apiext
deployment with kubectl rollout restart deploy/emissary-apiext -n emissary-system
.
This will create a new certificate with a one year expiration. We will issue a software patch to address this issue well before the one year expiration. Note that certificate renewal will not cause any downtime.
-2. **Install $productName$ $version$.**
+2. **Install Emissary $version$.**
- After installing the new CRDs, upgrade $productName$ $version$.
+ After installing the new CRDs, upgrade Emissary $version$.
Our emissary-emissaryns.yaml
file
- uses the `emissary` namespace, since this is the default for $productName$.
+ uses the `emissary` namespace, since this is the default for Emissary.
We also publish emissary-defaultns.yaml
for the
`default` namespace. For any other namespace, you should download one of these files and edit the namespaces manually.
diff --git a/content/en/docs/2.5/topics/install/upgrade/yaml/emissary-2.4/_index.md b/content/en/docs/2.5/topics/install/upgrade/yaml/emissary-2.4/_index.md
new file mode 100644
index 00000000..39dfcfd6
--- /dev/null
+++ b/content/en/docs/2.5/topics/install/upgrade/yaml/emissary-2.4/_index.md
@@ -0,0 +1,3 @@
+---
+title: 2.4
+---
diff --git a/content/en/docs/2.5/topics/install/upgrade/yaml/emissary-2.4/emissary-2.5.md b/content/en/docs/2.5/topics/install/upgrade/yaml/emissary-2.4/emissary-2.5.md
index 65018b74..fef3c7a7 100644
--- a/content/en/docs/2.5/topics/install/upgrade/yaml/emissary-2.4/emissary-2.5.md
+++ b/content/en/docs/2.5/topics/install/upgrade/yaml/emissary-2.4/emissary-2.5.md
@@ -1,9 +1,9 @@
-import Alert from '@material-ui/lab/Alert';
-
-# Upgrade $productName$ 2.4.X to $productName$ $version$ (YAML)
+---
+title: 2.4 to latest 2.x
+---
- This guide covers migrating from $productName$ 2.4 to $productName$ $version$. If
+ This guide covers migrating from Emissary 2.4 to Emissary $version$. If
this is not your exact situation, see the migration
matrix.
@@ -14,15 +14,15 @@ import Alert from '@material-ui/lab/Alert';
upgrade instructions.
-Since $productName$'s configuration is entirely stored in Kubernetes resources, upgrading between minor
+Since Emissary's configuration is entirely stored in Kubernetes resources, upgrading between minor
versions is straightforward.
Migration is a two-step process:
1. **Install new CRDs.**
- Before installing $productName$ $version$ itself, you need to update the CRDs in
- your cluster. This is mandatory during any upgrade of $productName$.
+ Before installing Emissary $version$ itself, you need to update the CRDs in
+ your cluster. This is mandatory during any upgrade of Emissary.
```
kubectl apply -f https://app.getambassador.io/yaml/emissary/$version$/emissary-crds.yaml
@@ -30,9 +30,9 @@ Migration is a two-step process:
```
- $productName$ $version$ includes a Deployment in the `emissary-system` namespace
+ Emissary $version$ includes a Deployment in the `emissary-system` namespace
called emissary-apiext
. This is the APIserver extension
- that supports converting $productName$ CRDs between getambassador.io/v2
+ that supports converting Emissary CRDs between getambassador.io/v2
and getambassador.io/v3alpha1
. This Deployment needs to be running at
all times.
@@ -44,17 +44,17 @@ Migration is a two-step process:
- There is a known issue with the emissary-apiext
service that impacts all $productName$ 2.x and 3.x users. Specifically, the TLS certificate used by apiext expires one year after creation and does not auto-renew. All users who are running $productName$/$AESproductName$ 2.x or 3.x with the apiext service should proactively renew their certificate as soon as practical by running kubectl delete --all secrets --namespace=emissary-system
to delete the existing certificate, and then restart the emissary-apiext
deployment with kubectl rollout restart deploy/emissary-apiext -n emissary-system
.
+ There is a known issue with the emissary-apiext
service that impacts all Emissary 2.x and 3.x users. Specifically, the TLS certificate used by apiext expires one year after creation and does not auto-renew. All users who are running Emissary/Ambassador Edge Stack 2.x or 3.x with the apiext service should proactively renew their certificate as soon as practical by running kubectl delete --all secrets --namespace=emissary-system
to delete the existing certificate, and then restart the emissary-apiext
deployment with kubectl rollout restart deploy/emissary-apiext -n emissary-system
.
This will create a new certificate with a one year expiration. We will issue a software patch to address this issue well before the one year expiration. Note that certificate renewal will not cause any downtime.
-2. **Install $productName$ $version$.**
+2. **Install Emissary $version$.**
- After installing the new CRDs, upgrade $productName$ $version$.
+ After installing the new CRDs, upgrade Emissary $version$.
Our emissary-emissaryns.yaml
file
- uses the `emissary` namespace, since this is the default for $productName$.
+ uses the `emissary` namespace, since this is the default for Emissary.
We also publish emissary-defaultns.yaml
for the
`default` namespace. For any other namespace, you should download one of these files and edit the namespaces manually.
diff --git a/content/en/docs/2.5/topics/install/yaml-install.md b/content/en/docs/2.5/topics/install/yaml-install.md
index b28e6265..51c3539c 100644
--- a/content/en/docs/2.5/topics/install/yaml-install.md
+++ b/content/en/docs/2.5/topics/install/yaml-install.md
@@ -1,36 +1,33 @@
---
- description: In this guide, we'll walk through the process of deploying $productName$ in Kubernetes for ingress routing.
+title: YAML
+description: In this guide, we'll walk through the process of deploying Emissary in Kubernetes for ingress routing.
---
-import Alert from '@material-ui/lab/Alert';
-
-# Install manually
-
- To migrate from $productName$ 1.X to $productName$ 2.X, see the
- [$productName$ migration matrix](../migration-matrix/). This guide
+ To migrate from Emissary 1.X to Emissary 2.X, see the
+ [Emissary migration matrix](../migration-matrix/). This guide
**will not work** for that, due to changes to the configuration
- resources used for $productName$ 2.X.
+ resources used for Emissary 2.X.
-In this guide, we'll walk you through installing $productName$ in your Kubernetes cluster.
+In this guide, we'll walk you through installing Emissary in your Kubernetes cluster.
The manual install process does not allow for as much control over configuration
-as the [Helm install method](../helm), so if you need more control over your $productName$
+as the [Helm install method](../helm), so if you need more control over your Emissary
installation, it is recommended that you use helm.
## Before you begin
-$productName$ is designed to run in Kubernetes for production. The most essential requirements are:
+Emissary is designed to run in Kubernetes for production. The most essential requirements are:
* Kubernetes 1.11 or later
* The `kubectl` command-line tool
## Install with YAML
-$productName$ is typically deployed to Kubernetes from the command line. If you don't have Kubernetes, you should use our [Docker](../docker) image to deploy $productName$ locally.
+Emissary is typically deployed to Kubernetes from the command line. If you don't have Kubernetes, you should use our [Docker](../docker) image to deploy Emissary locally.
1. In your terminal, run the following command:
@@ -42,9 +39,9 @@ $productName$ is typically deployed to Kubernetes from the command line. If you
```
- $productName$ $version$ includes a Deployment in the $productNamespace$ namespace
+ Emissary $version$ includes a Deployment in the $productNamespace$ namespace
called emissary-apiext
. This is the APIserver extension
- that supports converting $productName$ CRDs between getambassador.io/v2
+ that supports converting Emissary CRDs between getambassador.io/v2
and getambassador.io/v3alpha1
. This Deployment needs to be running at
all times.
@@ -56,7 +53,7 @@ $productName$ is typically deployed to Kubernetes from the command line. If you
- There is a known issue with the emissary-apiext
service that impacts all $productName$ 2.x and 3.x users. Specifically, the TLS certificate used by apiext expires one year after creation and does not auto-renew. All users who are running $productName$/$AESproductName$ 2.x or 3.x with the apiext service should proactively renew their certificate as soon as practical by running kubectl delete --all secrets --namespace=emissary-system
to delete the existing certificate, and then restart the emissary-apiext
deployment with kubectl rollout restart deploy/emissary-apiext -n emissary-system
.
+ There is a known issue with the emissary-apiext
service that impacts all Emissary 2.x and 3.x users. Specifically, the TLS certificate used by apiext expires one year after creation and does not auto-renew. All users who are running Emissary/Ambassador Edge Stack 2.x or 3.x with the apiext service should proactively renew their certificate as soon as practical by running kubectl delete --all secrets --namespace=emissary-system
to delete the existing certificate, and then restart the emissary-apiext
deployment with kubectl rollout restart deploy/emissary-apiext -n emissary-system
.
This will create a new certificate with a one year expiration. We will issue a software patch to address this issue well before the one year expiration. Note that certificate renewal will not cause any downtime.
@@ -70,18 +67,18 @@ $productName$ is typically deployed to Kubernetes from the command line. If you
3. Next Steps
- $productName$ shold now be successfully installed and running, but in order to get started deploying Services and test routing to them you need to configure a few more resources.
+ Emissary shold now be successfully installed and running, but in order to get started deploying Services and test routing to them you need to configure a few more resources.
- - [The `Listener` Resource](../../running/listener/) is required to configure which ports the $productName$ pods listen on so that they can begin responding to requests.
+ - [The `Listener` Resource](../../running/listener/) is required to configure which ports the Emissary pods listen on so that they can begin responding to requests.
- [The `Mapping` Resouce](../../using/intro-mappings/) is used to configure routing requests to services in your cluster.
- [The `Host` Resource](../../running/host-crd/) configures TLS termination for enablin HTTPS communication.
- - Explore how $productName$ [configures communication with clients](../../../howtos/configure-communications)
+ - Explore how Emissary [configures communication with clients](../../../howtos/configure-communications)
- We strongly recommend following along with our Quickstart Guide to get started by creating a Listener
, deploying a simple service to test with, and setting up a Mapping
to route requests from $productName$ to the demo service.
+ We strongly recommend following along with our Quickstart Guide to get started by creating a Listener
, deploying a simple service to test with, and setting up a Mapping
to route requests from Emissary to the demo service.
## Upgrading an existing installation
See the [migration matrix](../migration-matrix) for instructions about upgrading
-$productName$.
+Emissary.
diff --git a/content/en/docs/2.5/topics/running/_index.md b/content/en/docs/2.5/topics/running/_index.md
new file mode 100644
index 00000000..ab4f1421
--- /dev/null
+++ b/content/en/docs/2.5/topics/running/_index.md
@@ -0,0 +1,19 @@
+---
+title: "Running"
+description: "This section of the documentation provides instructions on running Emissary in a production environment"
+---
+
+This section of the documentation is designed for operators and site reliability engineers who are managing the deployment of Emissary. Learn more below:
+
+* *Global Configuration:* The [Ambassador module](ambassador) is used to set system-wide configuration.
+* *Exposing Emissary to the Internet:* The [`Listener` CRD](listener) defines which ports are exposed, including their protocols and security models. The [`Host` CRD](host-crd) defines how Emissary manages TLS, domains, and such.
+* *Load Balancing:* Emissary supports a number of different [load balancing strategies](load-balancer) as well as different ways to configure [service discovery](resolvers)
+* [Gzip Compression](gzip)
+* *Deploying Emissary:* On [Amazon Web Services](ambassador-with-aws) | [Google Cloud](ambassador-with-gke) | [general security and operational notes](running), including running multiple $productNamePlural$ on a cluster
+* *TLS/SSL:* [Simultaneously Routing HTTP and HTTPS](tls/cleartext-redirection#cleartext-routing) | [HTTP -> HTTPS Redirection](tls/cleartext-redirection#http-https-redirection) | [Mutual TLS](tls/mtls) | [TLS origination](tls/origination)
+* *Statistics and Monitoring:* [Integrating with Prometheus, DataDog, and other monitoring systems](statistics)
+* *Extending Emissary* Emissary can be extended with custom plug-ins that connect via HTTP/gRPC interfaces. [Custom Authentication](services/auth-service) | [The External Auth protocol](services/ext_authz) | [Custom Logging](services/log-service) | [Rate Limiting](services/rate-limit-service) | [Distributed Tracing](services/tracing-service)
+* *Troubleshooting:* [Diagnostics](diagnostics) | [Debugging](debugging)
+* *Scaling Emissary:* [Scaling Emissary](scaling)
+* *Ingress:* Emissary can function as an [Ingress Controller](ingress-controller)
+* *Error Response Overrides:* Emissary can override 4xx and 5xx responses with [custom response bodies](custom-error-responses)
diff --git a/content/en/docs/2.5/topics/running/ambassador-deployment.md b/content/en/docs/2.5/topics/running/ambassador-deployment.md
index fb559d69..9cd1bd3e 100644
--- a/content/en/docs/2.5/topics/running/ambassador-deployment.md
+++ b/content/en/docs/2.5/topics/running/ambassador-deployment.md
@@ -1,21 +1,23 @@
-# Deployment architecture
+---
+title: Deployment architecture
+---
-$productName$ can be deployed in a variety of configurations. The specific configuration depends on your data center.
+Emissary can be deployed in a variety of configurations. The specific configuration depends on your data center.
## Public cloud
-If you're using a public cloud provider such as Amazon, Azure, or Google, $productName$ can be deployed directly to a Kubernetes cluster running in the data center. Traffic is routed to $productName$ via a cloud-managed load balancer such as an Amazon Elastic Load Balancer or Google Cloud Load Balancer. Typically, this load balancer is transparently managed by Kubernetes in the form of the `LoadBalancer` service type. $productName$ then routes traffic to your services running in Kubernetes.
+If you're using a public cloud provider such as Amazon, Azure, or Google, Emissary can be deployed directly to a Kubernetes cluster running in the data center. Traffic is routed to Emissary via a cloud-managed load balancer such as an Amazon Elastic Load Balancer or Google Cloud Load Balancer. Typically, this load balancer is transparently managed by Kubernetes in the form of the `LoadBalancer` service type. Emissary then routes traffic to your services running in Kubernetes.
## On-Premise data center
-In an on-premise data center, $productName$ is deployed on the Kubernetes cluster. Instead of exposing it via the `LoadBalancer` service type, $productName$ is exposed as a `NodePort`. Traffic is sent to a specific port on any of the nodes in the cluster, which route the traffic to $productName$, which then routes the traffic to your services running in Kubernetes. You'll also need to deploy a separate load balancer to route traffic from your core routers to $productName$. [MetalLB](https://metallb.universe.tf/) is an open-source external load balancer for Kubernetes designed for this problem. Other options are traditional TCP load balancers such as F5 or Citrix Netscaler.
+In an on-premise data center, Emissary is deployed on the Kubernetes cluster. Instead of exposing it via the `LoadBalancer` service type, Emissary is exposed as a `NodePort`. Traffic is sent to a specific port on any of the nodes in the cluster, which route the traffic to Emissary, which then routes the traffic to your services running in Kubernetes. You'll also need to deploy a separate load balancer to route traffic from your core routers to Emissary. [MetalLB](https://metallb.universe.tf/) is an open-source external load balancer for Kubernetes designed for this problem. Other options are traditional TCP load balancers such as F5 or Citrix Netscaler.
## Hybrid data center
-Many data centers include services that are running outside of Kubernetes on virtual machines. For $productName$ to route to services both inside and outside of Kubernetes, it needs the real-time network location of all services. This problem is known as "[service discovery](https://www.datawire.io/guide/traffic/service-discovery-microservices/)" and $productName$ supports using [Consul](https://www.consul.io). Services in your data center register themselves with Consul, and $productName$ uses Consul-supplied data to dynamically route requests to available services.
+Many data centers include services that are running outside of Kubernetes on virtual machines. For Emissary to route to services both inside and outside of Kubernetes, it needs the real-time network location of all services. This problem is known as "[service discovery](https://www.datawire.io/guide/traffic/service-discovery-microservices/)" and Emissary supports using [Consul](https://www.consul.io). Services in your data center register themselves with Consul, and Emissary uses Consul-supplied data to dynamically route requests to available services.
## Hybrid on-premise data center
-The diagram below details a common network architecture for a hybrid on-premise data center. Traffic flows from core routers to MetalLB, which routes to $productName$ running in Kubernetes. $productName$ routes traffic to individual services running on both Kubernetes and VMs. Consul tracks the real-time network location of the services, which $productName$ uses to route to the given services.
+The diagram below details a common network architecture for a hybrid on-premise data center. Traffic flows from core routers to MetalLB, which routes to Emissary running in Kubernetes. Emissary routes traffic to individual services running on both Kubernetes and VMs. Consul tracks the real-time network location of the services, which Emissary uses to route to the given services.
![Architecture](../../../images/consul-ambassador.png)
diff --git a/content/en/docs/2.5/topics/running/ambassador-with-aws.md b/content/en/docs/2.5/topics/running/ambassador-with-aws.md
index b321543a..cf058510 100644
--- a/content/en/docs/2.5/topics/running/ambassador-with-aws.md
+++ b/content/en/docs/2.5/topics/running/ambassador-with-aws.md
@@ -1,16 +1,18 @@
-# $productName$ with AWS
+---
+title: AWS
+---
-$productName$ is a platform agnostic Kubernetes API gateway. It will run in any distribution of Kubernetes whether it is managed by a cloud provider or on homegrown bare-metal servers.
+Emissary is a platform agnostic Kubernetes API gateway. It will run in any distribution of Kubernetes whether it is managed by a cloud provider or on homegrown bare-metal servers.
-This document serves as a reference for different configuration options available when running Kubernetes in AWS. See [Installing $productName$](../../install) for the various installation methods available.
+This document serves as a reference for different configuration options available when running Kubernetes in AWS. See [Installing Emissary](../../install) for the various installation methods available.
## Recommended configuration
-There are lot of configuration options available to you when running $productName$ in AWS. While you should read this entire document to understand what is best for you, the following is the recommended configuration when running $productName$ in AWS:
+There are lot of configuration options available to you when running Emissary in AWS. While you should read this entire document to understand what is best for you, the following is the recommended configuration when running Emissary in AWS:
-It is recommended to terminate TLS at $productName$ so you can take advantage of all the TLS configuration options available in $productName$ including setting the allowed TLS versions, setting `alpn_protocol` options, enforcing HTTP -> HTTPS redirection, and [automatic certificate management](../host-crd) in the $productName$.
+It is recommended to terminate TLS at Emissary so you can take advantage of all the TLS configuration options available in Emissary including setting the allowed TLS versions, setting `alpn_protocol` options, enforcing HTTP -> HTTPS redirection, and [automatic certificate management](../host-crd) in the Emissary.
-When terminating TLS at $productName$, you should deploy a L4 [Network Load Balancer (NLB)](#network-load-balancer-nlb) with the proxy protocol enabled to get the best performance out of your load balancer while still preserving the client IP address.
+When terminating TLS at Emissary, you should deploy a L4 [Network Load Balancer (NLB)](#network-load-balancer-nlb) with the proxy protocol enabled to get the best performance out of your load balancer while still preserving the client IP address.
The following `Service` should be configured to deploy an NLB with cross zone load balancing enabled (see [NLB notes](#network-load-balancer-nlb) for caveat on the cross-zone-load-balancing annotation). You will need to configure the proxy protocol in the NLB manually in the AWS Console.
@@ -36,7 +38,7 @@ spec:
service: ambassador
```
- After deploying the `Service` above and manually enabling the proxy protocol you will need to deploy the following [Ambassador `Module`](../ambassador) to tell $productName$ to use the proxy protocol and then restart $productName$ for the configuration to take effect.
+ After deploying the `Service` above and manually enabling the proxy protocol you will need to deploy the following [Ambassador `Module`](../ambassador) to tell Emissary to use the proxy protocol and then restart Emissary for the configuration to take effect.
```yaml
apiVersion: getambassador.io/v3alpha1
@@ -49,7 +51,7 @@ spec:
use_proxy_proto: true
```
- $productName$ will now expect traffic from the load balancer to be wrapped with the proxy protocol so it can read the client IP address.
+ Emissary will now expect traffic from the load balancer to be wrapped with the proxy protocol so it can read the client IP address.
## AWS load balancer notes
@@ -94,9 +96,9 @@ The NLB is a second generation AWS Elastic Load Balancer. It can be ensure by a
* Can perform TLS termination
**Notes:**
-- The NLB is the most efficient load balancer capable of handling millions of requests per second. It is recommended for streaming connections since it will maintain the connection stream between the client and $productName$.
+- The NLB is the most efficient load balancer capable of handling millions of requests per second. It is recommended for streaming connections since it will maintain the connection stream between the client and Emissary.
- Most of the [load balancer annotations](#load-balancer-annotations) are respected by the NLB. You will need to manually configure the proxy protocol and take an extra step to enable cross zone load balancing.
-- Since it operates at L4 and cannot modify the request, you will need to tell $productName$ if it is terminating TLS or not (see [TLS termination](#tls-termination) notes below).
+- Since it operates at L4 and cannot modify the request, you will need to tell Emissary if it is terminating TLS or not (see [TLS termination](#tls-termination) notes below).
### Application Load Balancer (ALB)
@@ -112,20 +114,20 @@ The ALB is a second generation AWS Elastic Load Balancer. It cannot be ensured b
**Notes:**
-- The ALB can perform routing based on the path, headers, host, etc.. Since $productName$ performs this kind of routing in your cluster, unless you are using the same load balancer to route to services outside of Kubernetes, the overhead of provisioning an ALB is often not worth the benefits.
-- If you would like to use an ALB, you will need to expose $productName$ with a `type: NodePort` service and manually configure the ALB to forward to the correct ports.
+- The ALB can perform routing based on the path, headers, host, etc.. Since Emissary performs this kind of routing in your cluster, unless you are using the same load balancer to route to services outside of Kubernetes, the overhead of provisioning an ALB is often not worth the benefits.
+- If you would like to use an ALB, you will need to expose Emissary with a `type: NodePort` service and manually configure the ALB to forward to the correct ports.
- None of the [load balancer annotations](#load-balancer-annotations) are respected by the ALB. You will need to manually configure all options.
- The ALB will properly set the `X-Forward-Proto` header if terminating TLS. See (see [TLS termination](#tls-termination) notes below).
## Load balancer annotations
-Kubernetes on AWS exposes a mechanism to request certain load balancer configurations by annotating the `type: LoadBalancer` `Service`. The most complete set and explanations of these annotations can be found in this [Kubernetes document](https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer). This document will go over the subset that is most relevant when deploying $productName$.
+Kubernetes on AWS exposes a mechanism to request certain load balancer configurations by annotating the `type: LoadBalancer` `Service`. The most complete set and explanations of these annotations can be found in this [Kubernetes document](https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer). This document will go over the subset that is most relevant when deploying Emissary.
- `service.beta.kubernetes.io/aws-load-balancer-ssl-cert`:
Configures the load balancer to use a valid certificate ARN to terminate TLS at the Load Balancer.
- Traffic from the client into the load balancer is encrypted but, since TLS is being terminated at the load balancer, traffic from the load balancer to $productName$ will be cleartext. You will need to configure $productName$ differently depending on whether the load balancer is running in L4 or L7 (see [TLS termination](#tls-termination) notes below).
+ Traffic from the client into the load balancer is encrypted but, since TLS is being terminated at the load balancer, traffic from the load balancer to Emissary will be cleartext. You will need to configure Emissary differently depending on whether the load balancer is running in L4 or L7 (see [TLS termination](#tls-termination) notes below).
- `service.beta.kubernetes.io/aws-load-balancer-ssl-ports`:
@@ -153,25 +155,25 @@ Kubernetes on AWS exposes a mechanism to request certain load balancer configura
The proxy protocol can be used to preserve the client IP address.
- If setting this value, you need to make sure $productName$ is configured to use the proxy protocol (see [preserving the client IP address](#preserving-the-client-ip-address) below).
+ If setting this value, you need to make sure Emissary is configured to use the proxy protocol (see [preserving the client IP address](#preserving-the-client-ip-address) below).
**Note:** This annotation will not be recognized if `aws-load-balancer-type: "nlb"` is configured. Proxy protocol must be manually enabled for NLBs.
## TLS termination
-TLS termination is an important part of any modern web app. $productName$ exposes a lot of TLS termination configuration options that make it a powerful tool for managing encryption between your clients and microservices. Refer to the [TLS Termination](../tls) documentation for more information on how to configure TLS termination at $productName$.
+TLS termination is an important part of any modern web app. Emissary exposes a lot of TLS termination configuration options that make it a powerful tool for managing encryption between your clients and microservices. Refer to the [TLS Termination](../tls) documentation for more information on how to configure TLS termination at Emissary.
With AWS, the AWS Certificate Manager (ACM) makes it easy to configure TLS termination at an AWS load balancer using the annotations explained above.
-This means that, when running $productName$ in AWS, you have the choice between terminating TLS at the load balancer using a certificate from the ACM or at $productName$ using a certificate stored as a `Secret` in your cluster.
+This means that, when running Emissary in AWS, you have the choice between terminating TLS at the load balancer using a certificate from the ACM or at Emissary using a certificate stored as a `Secret` in your cluster.
-The following documentation will cover the different options available to you and how to configure $productName$ and the load balancer to get the most of each.
+The following documentation will cover the different options available to you and how to configure Emissary and the load balancer to get the most of each.
-### TLS termination at $productName$
+### TLS termination at Emissary
-Terminating TLS at $productName$ will guarantee you to be able to use all of the TLS termination options that $productName$ exposes including enforcing the minimum TLS version, setting the `alpn_protocols`, and redirecting cleartext to HTTPS.
+Terminating TLS at Emissary will guarantee you to be able to use all of the TLS termination options that Emissary exposes including enforcing the minimum TLS version, setting the `alpn_protocols`, and redirecting cleartext to HTTPS.
-If terminating TLS at $productName$, you can provision any AWS load balancer that you want with the following (default) port assignments:
+If terminating TLS at Emissary, you can provision any AWS load balancer that you want with the following (default) port assignments:
```yaml
spec:
@@ -184,13 +186,13 @@ spec:
targetPort: 8443
```
-While terminating TLS at $productName$ makes it easier to expose more advanced TLS configuration options, it does have the drawback of not being able to use the ACM to manage certificates. You will have to manage your TLS certificates yourself or use the [automatic certificate management](../host-crd) available in $productName$ to have $productName$ do it for you.
+While terminating TLS at Emissary makes it easier to expose more advanced TLS configuration options, it does have the drawback of not being able to use the ACM to manage certificates. You will have to manage your TLS certificates yourself or use the [automatic certificate management](../host-crd) available in Emissary to have Emissary do it for you.
### TLS termination at the load balancer
-If you choose to terminate TLS at your Amazon load balancer you will be able to use the ACM to manage TLS certificates. This option does add some complexity to your $productName$ configuration, depending on which load balancer you are using.
+If you choose to terminate TLS at your Amazon load balancer you will be able to use the ACM to manage TLS certificates. This option does add some complexity to your Emissary configuration, depending on which load balancer you are using.
-Terminating TLS at the load balancer means that $productName$ will be receiving all traffic as un-encrypted cleartext traffic. Since $productName$ expects to be serving both encrypted and cleartext traffic by default, you will need to make the following configuration changes to $productName$ to support this:
+Terminating TLS at the load balancer means that Emissary will be receiving all traffic as un-encrypted cleartext traffic. Since Emissary expects to be serving both encrypted and cleartext traffic by default, you will need to make the following configuration changes to Emissary to support this:
#### L4 load balancer (default ELB or NLB)
@@ -218,11 +220,11 @@ Terminating TLS at the load balancer means that $productName$ will be receiving
service: ambassador
```
- Note that the `spec.ports` has been changed so both the HTTP and HTTPS ports forward to the cleartext port 8080 on $productName$.
+ Note that the `spec.ports` has been changed so both the HTTP and HTTPS ports forward to the cleartext port 8080 on Emissary.
* **`Host`:**
- The `Host` configures how $productName$ handles encrypted and cleartext traffic. The following `Host` configuration will tell $productName$ to `Route` cleartext traffic that comes in from the load balancer:
+ The `Host` configures how Emissary handles encrypted and cleartext traffic. The following `Host` configuration will tell Emissary to `Route` cleartext traffic that comes in from the load balancer:
```yaml
apiVersion: getambassador.io/v3alpha1
@@ -243,7 +245,7 @@ Terminating TLS at the load balancer means that $productName$ will be receiving
**Important:**
-Because L4 load balancers do not set `X-Forwarded` headers, $productName$ will not be able to distinguish between traffic that came in to the load balancer as encrypted or cleartext. Because of this, **HTTP -> HTTPS redirection is not possible when terminating TLS at a L4 load balancer**.
+Because L4 load balancers do not set `X-Forwarded` headers, Emissary will not be able to distinguish between traffic that came in to the load balancer as encrypted or cleartext. Because of this, **HTTP -> HTTPS redirection is not possible when terminating TLS at a L4 load balancer**.
#### L7 load balancer (ELB or ALB)
@@ -273,11 +275,11 @@ Because L4 load balancers do not set `X-Forwarded` headers, $productName$ will n
service: ambassador
```
- Note that the `spec.ports` has been changed so both the HTTP and HTTPS ports forward to the cleartext port 8080 on $productName$.
+ Note that the `spec.ports` has been changed so both the HTTP and HTTPS ports forward to the cleartext port 8080 on Emissary.
* **`Host`:**
- The `Host` configures how $productName$ handles encrypted and cleartext traffic. The following `Host` configuration will tell $productName$ to `Redirect` cleartext traffic that comes in from the load balancer:
+ The `Host` configures how Emissary handles encrypted and cleartext traffic. The following `Host` configuration will tell Emissary to `Redirect` cleartext traffic that comes in from the load balancer:
```yaml
apiVersion: getambassador.io/v3alpha1
@@ -298,7 +300,7 @@ Because L4 load balancers do not set `X-Forwarded` headers, $productName$ will n
* **Module:**
- Since a L7 load balancer will be able to append to `X-Forwarded` headers, we need to configure $productName$ to trust the value of these headers. The following `Module` will configure $productName$ to trust a single L7 proxy in front of $productName$:
+ Since a L7 load balancer will be able to append to `X-Forwarded` headers, we need to configure Emissary to trust the value of these headers. The following `Module` will configure Emissary to trust a single L7 proxy in front of Emissary:
```yaml
apiVersion: getambassador.io/v3alpha1
@@ -314,11 +316,11 @@ Because L4 load balancers do not set `X-Forwarded` headers, $productName$ will n
**Note:**
-$productName$ uses the value of `X-Forwarded-Proto` to know if the request originated as encrypted or cleartext. Unlike L4 load balancers, L7 load balancers will set this header so HTTP -> HTTPS redirection is possible when terminating TLS at a L7 load balancer.
+Emissary uses the value of `X-Forwarded-Proto` to know if the request originated as encrypted or cleartext. Unlike L4 load balancers, L7 load balancers will set this header so HTTP -> HTTPS redirection is possible when terminating TLS at a L7 load balancer.
## Preserving the client IP address
-Many applications will want to know the IP address of the connecting client. In Kubernetes, this IP address is often obscured by the IP address of the `Node` that is forwarding the request to $productName$ so extra configuration must be done if you need to preserve the client IP address.
+Many applications will want to know the IP address of the connecting client. In Kubernetes, this IP address is often obscured by the IP address of the `Node` that is forwarding the request to Emissary so extra configuration must be done if you need to preserve the client IP address.
In AWS, there are two options for preserving the client IP address.
@@ -326,7 +328,7 @@ In AWS, there are two options for preserving the client IP address.
A L7 load balancer will populate the `X-Forwarded-For` header with the IP address of the downstream connecting client. If your clients are connecting directly to the load balancer, this will be the IP address of your client.
- When using L7 load balancers, you must configure $productName$ to trust the value of `X-Forwarded-For` and not append its own IP address to it by setting `xff_num_trusted_hops` and `use_remote_address: false` in the [Ambassador `Module`](../ambassador):
+ When using L7 load balancers, you must configure Emissary to trust the value of `X-Forwarded-For` and not append its own IP address to it by setting `xff_num_trusted_hops` and `use_remote_address: false` in the [Ambassador `Module`](../ambassador):
```yaml
apiVersion: getambassador.io/v3alpha1
@@ -340,7 +342,7 @@ In AWS, there are two options for preserving the client IP address.
use_remote_address: false
```
- After configuring the above `Module`, you will need to restart $productName$ for the changes to take effect.
+ After configuring the above `Module`, you will need to restart Emissary for the changes to take effect.
2. Use the proxy protocol
@@ -348,7 +350,7 @@ In AWS, there are two options for preserving the client IP address.
In AWS, you can configure ELBs to use the proxy protocol by setting the `service.beta.kubernetes.io/aws-load-balancer-proxy-protocol: "*"` annotation on the service. You must manually configure this on ALBs and NLBs.
- After configuring the load balancer to use the proxy protocol, you need to tell $productName$ to expect it on the request.
+ After configuring the load balancer to use the proxy protocol, you need to tell Emissary to expect it on the request.
```yaml
apiVersion: getambassador.io/v3alpha1
@@ -361,4 +363,4 @@ In AWS, there are two options for preserving the client IP address.
use_proxy_proto: true
```
- After configuring the above `Module`, you will need to restart $productName$ for the changes to take effect.
+ After configuring the above `Module`, you will need to restart Emissary for the changes to take effect.
diff --git a/content/en/docs/2.5/topics/running/ambassador-with-gke.md b/content/en/docs/2.5/topics/running/ambassador-with-gke.md
index 2b90581d..d13d7e8e 100644
--- a/content/en/docs/2.5/topics/running/ambassador-with-gke.md
+++ b/content/en/docs/2.5/topics/running/ambassador-with-gke.md
@@ -1,8 +1,10 @@
-# $productName$ with GKE
+---
+title: GKE
+---
Google offers a [L7 load balancer](https://cloud.google.com/kubernetes-engine/docs/concepts/ingress) to
leverage network services such as managed SSL certificates, SSL offloading or the Google content delivery network.
-A L7 load balancer in front of $productName$ can be configured by hand or by using the Ingress-GCE resource. Using the
+A L7 load balancer in front of Emissary can be configured by hand or by using the Ingress-GCE resource. Using the
Ingress resource also allows you to create Google-managed SSL certificates through Kubernetes.
With this setup, HTTPS will be terminated at the Google load balancer. The load balancer will be created and configured by
@@ -11,25 +13,25 @@ the Ingress-GCE resource. The load balancer consists of a set of
[backend services](https://cloud.google.com/load-balancing/docs/backend-service).
In this setup, the ingress resource creates two forwarding rules, one for HTTP and one for HTTPS. The HTTPS
forwarding rule has the SSL certificates attached. Also, one backend service will be created to point to
-a list of instance groups at a static port. This will be the NodePort of the $productName$ service.
+a list of instance groups at a static port. This will be the NodePort of the Emissary service.
-With this setup, the load balancer terminates HTTPS and then directs the traffic to the $productName$ service
-via the `NodePort`. $productName$ is then doing all the routing to the other internal/external services.
+With this setup, the load balancer terminates HTTPS and then directs the traffic to the Emissary service
+via the `NodePort`. Emissary is then doing all the routing to the other internal/external services.
# Overview of steps
1. Install and configure the ingress with the HTTP(S) load balancer
-2. Install $productName$
-3. Configure and connect $productName$ to ingress
+2. Install Emissary
+3. Configure and connect Emissary to ingress
4. Create an SSL certificate and enable HTTPS
5. Create BackendConfig for health checks
-6. Configure $productName$ to do HTTP -> HTTPS redirection
+6. Configure Emissary to do HTTP -> HTTPS redirection
`ambassador` will be running as a `NodePort` service. Health checks will be configured to go to a BackendConfig resource.
-## 0. $productName$
+## 0. Emissary
-This guide will install $OSSproductName$. You can also install $AESproductName$. Please note:
+This guide will install Emissary. You can also install Ambassador Edge Stack. Please note:
- The ingress and the `ambassador` service need to run in the same namespace
- The `ambassador` service needs to be of type `NodePort` and not `LoadBalancer`. Also remove the line with `externalTrafficPolicy: Local`
- Ambassador-Admin needs to be of type `NodePort` instead of `ClusterIP` since it needs to be available for health checks
@@ -41,12 +43,12 @@ is up and running follow [this tutorial from Google](https://cloud.google.com/ku
an ingress and a L7 load balancer. After you have completed these steps you will have a running L7 load balancer
and one service.
-## 2. Install $productName$
+## 2. Install Emissary
-Follow the first section of the [$OSSproductName$ installation guide](../../install/) to install $OSSproductName$.
+Follow the first section of the [Emissary installation guide](../../install/) to install Emissary.
Stop before defining the `ambassador` service.
-$productName$ needs to be deployed as `NodePort` instead of `LoadBalancer` to work with the L7 load balancer and the ingress.
+Emissary needs to be deployed as `NodePort` instead of `LoadBalancer` to work with the L7 load balancer and the ingress.
Save the YAML below in ambassador.yaml and apply with `kubectl apply -f ambassador.yaml`
@@ -178,9 +180,9 @@ spec:
service: ambassador
```
-## 6. Configure $productName$ to do HTTP -> HTTPS redirection
+## 6. Configure Emissary to do HTTP -> HTTPS redirection
-Configure $productName$ to [redirect traffic from HTTP to HTTPS](../tls/cleartext-redirection/#http-https-redirection). You will need to restart $productName$ to effect the changes with `kubectl rollout restart deployment ambassador`.
+Configure Emissary to [redirect traffic from HTTP to HTTPS](../tls/cleartext-redirection/#http-https-redirection). You will need to restart Emissary to effect the changes with `kubectl rollout restart deployment ambassador`.
The result should be that `http://www.example.com` will redirect to `https://www.example.com`.
diff --git a/content/en/docs/2.5/topics/running/ambassador.md b/content/en/docs/2.5/topics/running/ambassador.md
index 3af41d93..d12a84e1 100644
--- a/content/en/docs/2.5/topics/running/ambassador.md
+++ b/content/en/docs/2.5/topics/running/ambassador.md
@@ -1,6 +1,6 @@
-import Alert from '@material-ui/lab/Alert';
-
-# The `Ambassador` `Module` Resource
+---
+title: Ambassador Module
+---
Contents
@@ -18,9 +18,9 @@ import Alert from '@material-ui/lab/Alert';
-If present, the `ambassador` `Module` defines system-wide configuration for $productName$. You won't need it unless you need to change one of the system-wide configuration settings below.
+If present, the `ambassador` `Module` defines system-wide configuration for Emissary. You won't need it unless you need to change one of the system-wide configuration settings below.
-To use the `ambassador` `Module` to configure $productName$, it MUST be named `ambassador`, otherwise it will be ignored. To create multiple `ambassador` `Module`s in the same Kubernetes namespace, you will need to apply them as annotations with separate `ambassador_id`s: you will not be able to use multiple CRDs.
+To use the `ambassador` `Module` to configure Emissary, it MUST be named `ambassador`, otherwise it will be ignored. To create multiple `ambassador` `Module`s in the same Kubernetes namespace, you will need to apply them as annotations with separate `ambassador_id`s: you will not be able to use multiple CRDs.
There are many items that can be configured on the `ambassador` `Module`. They are listed below with examples and grouped by category.
@@ -30,7 +30,7 @@ There are many items that can be configured on the `ambassador` `Module`. They a
* `allow_chunked_length: true` tells Envoy to allow requests or responses with both `Content-Length` and `Transfer-Encoding` headers set. The default is `false`.
-By default, messages with both `Content-Length` and `Content-Transfer-Encoding` are rejected. If `allow_chunked_length` is `true`, $productName$ will remove the `Content-Length` header and process the message. See the [Envoy documentation for more details](https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/core/v3/protocol.proto.html?highlight=allow_chunked_length#config-core-v3-http1protocoloptions).
+By default, messages with both `Content-Length` and `Content-Transfer-Encoding` are rejected. If `allow_chunked_length` is `true`, Emissary will remove the `Content-Length` header and process the message. See the [Envoy documentation for more details](https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/core/v3/protocol.proto.html?highlight=allow_chunked_length#config-core-v3-http1protocoloptions).
##### Envoy access logs
@@ -70,7 +70,7 @@ would allow 30 seconds to validate the generated Envoy configuration.
* `error_response_overrides` permits changing the status code and body text for 4XX and 5XX response codes. The default is not to override any error responses.
-By default, $productName$ will pass through error responses without modification, and errors generated locally will use Envoy's default response body, if any.
+By default, Emissary will pass through error responses without modification, and errors generated locally will use Envoy's default response body, if any.
See [using error response overrides](../custom-error-responses) for usage details. For example, this configuration:
@@ -92,7 +92,7 @@ Two attributes allow providing information about the client's TLS certificate to
* `set_current_client_cert_details` will tell Envoy what information to include in the
`X-Forwarded-Client-Cert` header. The default is not to include the `X-Forwarded-Client-Cert` header at all.
-$productName$ will not forward information about a certificate that it cannot validate.
+Emissary will not forward information about a certificate that it cannot validate.
See the Envoy documentation on [X-Forwarded-Client-Cert](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_conn_man/headers.html?highlight=xfcc#x-forwarded-client-cert) and [SetCurrentClientCertDetails](https://www.envoyproxy.io/docs/envoy/latest/api-v3/extensions/filters/network/http_connection_manager/v3/http_connection_manager.proto.html#extensions-filters-network-http-connection-manager-v3-httpconnectionmanager-setcurrentclientcertdetails) for more information.
@@ -107,7 +107,7 @@ set_current_client_cert_details: SANITIZE
##### Suppress Envoy headers
-* `suppress_envoy_headers: true` will prevent $productName$ from emitting certain additional
+* `suppress_envoy_headers: true` will prevent Emissary from emitting certain additional
headers to HTTP requests and responses. The default is `false`.
For the exact set of headers covered by this config, see the [Envoy documentation](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_filters/router_filter#config-http-filters-router-headers-set)
@@ -117,9 +117,9 @@ For the exact set of headers covered by this config, see the [Envoy documentatio
##### Ambassador ID
-* `ambassador_id` allows using multiple instances of $productName$ in the same cluster. The default is unset.
+* `ambassador_id` allows using multiple instances of Emissary in the same cluster. The default is unset.
-We recommend _not_ setting `ambassador_id` if you are running only one instance of $productName$ in your cluster. For more information, see the [Running and Deployment documentation](../running/#ambassador_id).
+We recommend _not_ setting `ambassador_id` if you are running only one instance of Emissary in your cluster. For more information, see the [Running and Deployment documentation](../running/#ambassador_id).
If used, the `ambassador_id` value must be an array, for example:
@@ -129,7 +129,7 @@ ambassador_id: [ "test_environment" ]
##### Defaults
-* `defaults` provides a dictionary of default values that will be applied to various $productName$ resources. The default is to have no defaults configured.
+* `defaults` provides a dictionary of default values that will be applied to various Emissary resources. The default is to have no defaults configured.
See [Using `ambassador` `Module` Defaults](../../using/defaults) for more information.
@@ -144,9 +144,9 @@ See [Using `ambassador` `Module` Defaults](../../using/defaults) for more inform
gRPC is a binary HTTP/2-based protocol. While this allows high performance, it can be problematic for clients that are unable to speak HTTP/2 (such as JavaScript in many browsers, or legacy clients in difficult-to-update environments).
-The gRPC-HTTP/1.1 bridge can translate HTTP/1.1 calls with `Content-Type: application/grpc` into gRPC calls: $productName$ will perform buffering and translation as necessary. For more details on the translation process, see the [Envoy gRPC HTTP/1.1 bridge documentation](https://www.envoyproxy.io/docs/envoy/v1.11.2/configuration/http_filters/grpc_http1_bridge_filter.html).
+The gRPC-HTTP/1.1 bridge can translate HTTP/1.1 calls with `Content-Type: application/grpc` into gRPC calls: Emissary will perform buffering and translation as necessary. For more details on the translation process, see the [Envoy gRPC HTTP/1.1 bridge documentation](https://www.envoyproxy.io/docs/envoy/v1.11.2/configuration/http_filters/grpc_http1_bridge_filter.html).
-Likewise, gRPC-Web is a JSON and HTTP-based protocol that allows browser-based clients to take advantage of gRPC protocols. The gRPC-Web specification requires a server-side proxy to translate between gRPC-Web requests and gRPC backend services, and $productName$ can fill this role when the gRPC-Web bridge is enabled. For more details on the translation process, see the [Envoy gRPC HTTP/1.1 bridge documentation](https://www.envoyproxy.io/docs/envoy/v1.11.2/configuration/http_filters/grpc_http1_bridge_filter.html); for more details on gRPC-Web itself, see the [gRPC-Web client GitHub repo](https://github.com/grpc/grpc-web).
+Likewise, gRPC-Web is a JSON and HTTP-based protocol that allows browser-based clients to take advantage of gRPC protocols. The gRPC-Web specification requires a server-side proxy to translate between gRPC-Web requests and gRPC backend services, and Emissary can fill this role when the gRPC-Web bridge is enabled. For more details on the translation process, see the [Envoy gRPC HTTP/1.1 bridge documentation](https://www.envoyproxy.io/docs/envoy/v1.11.2/configuration/http_filters/grpc_http1_bridge_filter.html); for more details on gRPC-Web itself, see the [gRPC-Web client GitHub repo](https://github.com/grpc/grpc-web).
##### Statistics
@@ -221,13 +221,13 @@ header_case_overrides:
- X-EXPERIMENTAL
```
-If the upstream service responds with `x-my-header: 1`, $productName$ will return `X-MY-Header: 1` to the client. Similarly, if the client includes `x-ExperiMENTAL: yes` in its request, the request to the upstream service will include `X-EXPERIMENTAL: yes`. Other headers will not be altered; $productName$ will use its default lowercase header.
+If the upstream service responds with `x-my-header: 1`, Emissary will return `X-MY-Header: 1` to the client. Similarly, if the client includes `x-ExperiMENTAL: yes` in its request, the request to the upstream service will include `X-EXPERIMENTAL: yes`. Other headers will not be altered; Emissary will use its default lowercase header.
Please see the [Envoy documentation](https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/core/v3/protocol.proto.html#config-core-v3-http1protocoloptions-headerkeyformat) for more information. Note that in general, we recommend updating clients and services rather than relying on `header_case_overrides`.
##### Linkerd interoperability
-* `add_linkerd_headers: true` will force $productName$ to include the `l5d-dst-override` header for Linkerd. The default is `false`.
+* `add_linkerd_headers: true` will force Emissary to include the `l5d-dst-override` header for Linkerd. The default is `false`.
When using older Linkerd installations, requests going to an upstream service may need to include the `l5d-dst-override` header to ensure that Linkerd will route them correctly. Setting `add_linkerd_headers` does this automatically. See the [Mapping](../../using/mappings#linkerd-interoperability-add_linkerd_headers) documentation for more details.
@@ -243,9 +243,9 @@ See [Envoy documentation](https://www.envoyproxy.io/docs/envoy/latest/api-v3/ext
##### Strip matching host port
-* `strip_matching_host_port: true` will tell $productName$ to strip any port number from the host/authority header before processing and routing the request if that port number matches the port number of Envoy's listener. The default is `false`, which will preserve any port number.
+* `strip_matching_host_port: true` will tell Emissary to strip any port number from the host/authority header before processing and routing the request if that port number matches the port number of Envoy's listener. The default is `false`, which will preserve any port number.
-In the default installation of $productName$ the public port is 443, which then maps internally to 8443, so this only works in custom installations where the public Service port and Envoy listener port match.
+In the default installation of Emissary the public port is 443, which then maps internally to 8443, so this only works in custom installations where the public Service port and Envoy listener port match.
A common reason to try using this property is if you are using gRPC with TLS and your client library appends the port to the Host header (i.e. `myurl.com:443`). We have an alternative solution in our [gRPC guide](../../../howtos/grpc#working-with-host-headers-that-include-the-port) that uses a [Lua script](#lua-scripts) to remove all ports from every Host header for that use case.
@@ -256,7 +256,7 @@ A common reason to try using this property is if you are using gRPC with TLS and
##### Envoy's admin port
-* `admin_port` specifies the port where $productName$'s Envoy will listen for low-level admin requests. The default is 8001; it should almost never need changing.
+* `admin_port` specifies the port where Emissary's Envoy will listen for low-level admin requests. The default is 8001; it should almost never need changing.
##### Lua scripts
@@ -277,29 +277,29 @@ Some caveats around the embedded scripts:
* They run in-process, so any bugs in your Lua script can break every request.
* They're run on every request/response to every URL.
-* They're inlined in the $productName$ YAML; as such, we do not recommend using Lua scripts for long, complex logic.
+* They're inlined in the Emissary YAML; as such, we do not recommend using Lua scripts for long, complex logic.
-If you need more flexible and configurable options, $AESproductName$ supports a [pluggable Filter system](/docs/edge-stack/latest/topics/using/filters/).
+If you need more flexible and configurable options, Ambassador Edge Stack supports a [pluggable Filter system](/docs/edge-stack/latest/topics/using/filters/).
##### Merge slashes
-* `merge_slashes: true` will cause $productName$ to merge adjacent slashes in incoming paths when doing route matching and request filtering. The default is `false`.
+* `merge_slashes: true` will cause Emissary to merge adjacent slashes in incoming paths when doing route matching and request filtering. The default is `false`.
For example, with `merge_slashes: true`, a request for `//foo///bar` would be matched to a `Mapping` with prefix `/foo/bar`.
##### Modify Default Buffer Size
-By default, the Envoy that ships with $productName$ uses a defailt of 1MiB soft limit for an upstream service's read and write buffer limits. This setting allows you to configure that buffer limit. See the [Envoy docs](https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/cluster/v3/cluster.proto.html?highlight=per_connection_buffer_limit_bytes) for more information.
+By default, the Envoy that ships with Emissary uses a defailt of 1MiB soft limit for an upstream service's read and write buffer limits. This setting allows you to configure that buffer limit. See the [Envoy docs](https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/cluster/v3/cluster.proto.html?highlight=per_connection_buffer_limit_bytes) for more information.
```yaml
buffer_limit_bytes: 5242880 # Sets the default buffer limit to 5 MiB
```
-##### Use $productName$ namespace for service resolution
+##### Use Emissary namespace for service resolution
-* `use_ambassador_namespace_for_service_resolution: true` tells $productName$ to assume that unqualified services are in the same namespace as $productName$. The default is `false`.
+* `use_ambassador_namespace_for_service_resolution: true` tells Emissary to assume that unqualified services are in the same namespace as Emissary. The default is `false`.
-By default, when $productName$ sees a service name without a namespace, it assumes that the namespace is the same as the resource referring to the service. For example, for this `Mapping`:
+By default, when Emissary sees a service name without a namespace, it assumes that the namespace is the same as the resource referring to the service. For example, for this `Mapping`:
```yaml
apiVersion: getambassador.io/v3alpha1
@@ -313,9 +313,9 @@ spec:
service: upstream
```
-$productName$ would look for a Service named `upstream` in namespace `foo`.
+Emissary would look for a Service named `upstream` in namespace `foo`.
-However, if `use_ambassador_namespace_for_service_resolution` is `true`, this `Mapping` would look for a Service named `foo` in the namespace in which $productName$ is installed instead.
+However, if `use_ambassador_namespace_for_service_resolution` is `true`, this `Mapping` would look for a Service named `foo` in the namespace in which Emissary is installed instead.
---
@@ -325,7 +325,7 @@ However, if `use_ambassador_namespace_for_service_resolution` is `true`, this `M
* `diagnostics` controls access to the diagnostics interface.
-By default, $productName$ creates a `Mapping` that allows access to the diagnostic interface at `/ambassador/v0/diag` from anywhere in the cluster. To disable the `Mapping` entirely, set `diagnostics.enabled` to `false`:
+By default, Emissary creates a `Mapping` that allows access to the diagnostic interface at `/ambassador/v0/diag` from anywhere in the cluster. To disable the `Mapping` entirely, set `diagnostics.enabled` to `false`:
```yaml
@@ -333,7 +333,7 @@ diagnostics:
enabled: false
```
-With diagnostics disabled, `/ambassador/v0/diag` will respond with 404; however, the service itself is still running, and `/ambassador/v0/diag/` is reachable from inside the $productName$ Pod at `https://localhost:8877`. You can use Kubernetes port forwarding to set up remote access to the diagnostics page temporarily:
+With diagnostics disabled, `/ambassador/v0/diag` will respond with 404; however, the service itself is still running, and `/ambassador/v0/diag/` is reachable from inside the Emissary Pod at `https://localhost:8877`. You can use Kubernetes port forwarding to set up remote access to the diagnostics page temporarily:
```
kubectl port-forward -n ambassador deploy/ambassador 8877
@@ -356,9 +356,9 @@ See [Protecting Access to the Diagnostics Interface](../../../howtos/protecting-
* `enable_ipv4` determines whether IPv4 DNS lookups are enabled. The default is `true`.
* `enable_ipv6` determines whether IPv6 DNS lookups are enabled. The default is `false`.
-If both IPv4 and IPv6 are enabled, $productName$ will prefer IPv6. This can have strange effects if $productName$ receives `AAAA` records from a DNS lookup, but the underlying network of the pod doesn't actually support IPv6 traffic. For this reason, the default is IPv4 only.
+If both IPv4 and IPv6 are enabled, Emissary will prefer IPv6. This can have strange effects if Emissary receives `AAAA` records from a DNS lookup, but the underlying network of the pod doesn't actually support IPv6 traffic. For this reason, the default is IPv4 only.
-An [`Mapping`](../../using/mappings) can override both `enable_ipv4` and `enable_ipv6`, but if either is not stated explicitly in a `Mapping`, the values here are used. Most $productName$ installations will probably be able to avoid overriding these settings in Mappings.
+An [`Mapping`](../../using/mappings) can override both `enable_ipv4` and `enable_ipv6`, but if either is not stated explicitly in a `Mapping`, the values here are used. Most Emissary installations will probably be able to avoid overriding these settings in Mappings.
##### HTTP/1.0 support
@@ -398,25 +398,25 @@ ip_allow:
- remote: 99.99.0.0/16
```
-The keyword `peer` specifies that the match should happen using the IP address of the other end of the network connection carrying the request: `X-Forwarded-For` and the `PROXY` protocol are both ignored. Here, our example specifies that connections originating from the $productName$ pod itself should always be allowed.
+The keyword `peer` specifies that the match should happen using the IP address of the other end of the network connection carrying the request: `X-Forwarded-For` and the `PROXY` protocol are both ignored. Here, our example specifies that connections originating from the Emissary pod itself should always be allowed.
-The keyword `remote` specifies that the match should happen using the IP address of the HTTP client, taking into account `X-Forwarded-For` and the `PROXY` protocol if they are allowed (if they are not allowed, or not present, the peer address will be used instead). This permits matches to behave correctly when, for example, $productName$ is behind a layer 7 load balancer. Here, our example specifies that HTTP clients from the IP address range `99.99.0.0` - `99.99.255.255` will be allowed.
+The keyword `remote` specifies that the match should happen using the IP address of the HTTP client, taking into account `X-Forwarded-For` and the `PROXY` protocol if they are allowed (if they are not allowed, or not present, the peer address will be used instead). This permits matches to behave correctly when, for example, Emissary is behind a layer 7 load balancer. Here, our example specifies that HTTP clients from the IP address range `99.99.0.0` - `99.99.255.255` will be allowed.
You may specify as many ranges for each kind of keyword as desired.
##### Rejecting Client Requests With Escaped Slashes
-* `reject_requests_with_escaped_slashes: true` will tell $productName$ to reject requests containing escaped slashes. The default is `false`.
+* `reject_requests_with_escaped_slashes: true` will tell Emissary to reject requests containing escaped slashes. The default is `false`.
-When set to `true`, $productName$ will reject any client requests that contain escaped slashes (`%2F`, `%2f`, `%5C`, or `%5c`) in their URI path by returning HTTP 400. By default, $productName$ will forward these requests unmodified.
+When set to `true`, Emissary will reject any client requests that contain escaped slashes (`%2F`, `%2f`, `%5C`, or `%5c`) in their URI path by returning HTTP 400. By default, Emissary will forward these requests unmodified.
In general, a request with an escaped slash will _not_ match a `Mapping` prefix with an unescaped slash. However, external authentication services and other upstream services may handle escaped slashes differently, which can lead to security issues if paths with escaped slashes are allowed. By setting `reject_requests_with_escaped_slashes: true`, this class of security concern can be largely avoided.
##### Trust downstream client IP
-* `use_remote_address: false` tells $productName$ that it cannot trust the remote address of incoming connections, and must instead rely exclusively on the `X-Forwarded-For` header. The default is `true`.
+* `use_remote_address: false` tells Emissary that it cannot trust the remote address of incoming connections, and must instead rely exclusively on the `X-Forwarded-For` header. The default is `true`.
-When `true` (the default), $productName$ will append its own IP address to the `X-Forwarded-For` header so that upstream services of $productName$ can get the full set of IP addresses that have propagated a request. You may also need to set `externalTrafficPolicy: Local` on your `LoadBalancer` to propagate the original source IP address.
+When `true` (the default), Emissary will append its own IP address to the `X-Forwarded-For` header so that upstream services of Emissary can get the full set of IP addresses that have propagated a request. You may also need to set `externalTrafficPolicy: Local` on your `LoadBalancer` to propagate the original source IP address.
See the [Envoy documentation on the `X-Forwarded-For header` ](https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_conn_man/headers) and the [Kubernetes documentation on preserving the client source IP](https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#preserving-the-client-source-ip) for more details.
@@ -434,7 +434,7 @@ See the [`Listener` documentation](../listener/#securitymodel) for more details.
* `listener_idle_timeout_ms` sets the idle timeout for incoming connections. The default is no timeout, meaning that incoming connections may remain idle forever.
-If set, this specifies the length of time (in milliseconds) that an incoming connection is allowed to be idle before being dropped. This can useful if you have proxies and/or firewalls in front of $productName$ and need to control how $productName$ initiates closing an idle TCP connection.
+If set, this specifies the length of time (in milliseconds) that an incoming connection is allowed to be idle before being dropped. This can useful if you have proxies and/or firewalls in front of Emissary and need to control how Emissary initiates closing an idle TCP connection.
Please see the [Envoy documentation on HTTP protocol options](https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/core/v3/protocol.proto#config-core-v3-httpprotocoloptions) for more information.
@@ -442,7 +442,7 @@ Please see the [Envoy documentation on HTTP protocol options](https://www.envoyp
* `keepalive` sets the global TCP keepalive settings.
-$productName$ will use these settings for all `AmbasasdorMapping`s unless overridden in a `Mapping`'s configuration. Without `keepalive`, $productName$ follows the operating system defaults.
+Emissary will use these settings for all `AmbasasdorMapping`s unless overridden in a `Mapping`'s configuration. Without `keepalive`, Emissary follows the operating system defaults.
For example, the following configuration:
@@ -490,7 +490,7 @@ You can override this setting with [`timeout_ms` on a `Mapping`](../../using/tim
* `readiness_probe` sets whether `/ambassador/v0/check_ready` is automatically mapped
* `liveness_probe` sets whether `/ambassador/v0/check_alive` is automatically mapped
-By default, $productName$ creates `Mapping`s that support readiness and liveness checks at `/ambassador/v0/check_ready` and `/ambassador/v0/check_alive`. To disable the readiness `Mapping` entirely, set `readiness_probe.enabled` to `false`:
+By default, Emissary creates `Mapping`s that support readiness and liveness checks at `/ambassador/v0/check_ready` and `/ambassador/v0/check_alive`. To disable the readiness `Mapping` entirely, set `readiness_probe.enabled` to `false`:
```yaml
@@ -506,7 +506,7 @@ liveness_probe:
enabled: false
```
-A disabled probe endpoint will respond with 404; however, the service is still running, and will be accessible on localhost port 8877 from inside the $productName$ Pod.
+A disabled probe endpoint will respond with 404; however, the service is still running, and will be accessible on localhost port 8877 from inside the Emissary Pod.
You can change these to route requests to some other service. For example, to have the readiness probe map to the `quote` application's health check:
@@ -536,7 +536,7 @@ retry_policy:
* `circuit_breakers` sets the global circuit breaking configuration defaults
-You can override the circuit breaker settings for individual `Mapping`s. By default, $productName$ does not configure any circuit breakers. For more information, see the [circuit breaking reference](../../using/circuit-breakers).
+You can override the circuit breaker settings for individual `Mapping`s. By default, Emissary does not configure any circuit breakers. For more information, see the [circuit breaking reference](../../using/circuit-breakers).
##### Default label domain and labels
diff --git a/content/en/docs/2.5/topics/running/custom-error-responses.md b/content/en/docs/2.5/topics/running/custom-error-responses.md
index b0ad9877..690c4482 100644
--- a/content/en/docs/2.5/topics/running/custom-error-responses.md
+++ b/content/en/docs/2.5/topics/running/custom-error-responses.md
@@ -1,11 +1,11 @@
-import Alert from '@material-ui/lab/Alert';
-
-# Custom error responses
+---
+title: Custom error responses
+---
Custom error responses set overrides for HTTP response statuses generated either
-by $productName$ or upstream services.
+by Emissary or upstream services.
-They can be configured either on the $productName$
+They can be configured either on the Emissary
[`Module`](../ambassador)
or on an [`Mapping`](../../using/intro-mappings/), the schema is identical. See
below for more information on [rule precedence](#rule-precedence).
@@ -22,8 +22,8 @@ below for more information on [rule precedence](#rule-precedence).
serialized as JSON and used as the new response body.
+ `text_format_source`: Describes a file to be used as the
response. If used, `filename` must be set and the file must exist
- on the $productName$ pod.
- * `filename`: A file path on the $productName$ pod that will be used
+ on the Emissary pod.
+ * `filename`: A file path on the Emissary pod that will be used
as the new response body.
Only one of `text_format`, `json_format`, or `text_format_source` may be provided.
@@ -52,7 +52,7 @@ for a request that resulted in a response code of 401.
only be as part of an
AccessLog substitution, for example %RESPONSE_CODE%
or
%PROTOCOL%
. If a %
is neither part of a valid
- substitution nor an escape, $productName$ will ignore the custom error response.
+ substitution nor an escape, Emissary will ignore the custom error response.
## Simple response bodies
@@ -83,10 +83,10 @@ spec:
For more complex response bodies a file can be returned as the response.
This could be used for a customer friendly HTML document for example. Use
-`text_format_source` with a `filename` set as a path on the $productName$ pod.
+`text_format_source` with a `filename` set as a path on the Emissary pod.
`content_type` should be used set the specific file type, such as `text/html`.
-First configure the $productName$ module:
+First configure the Emissary module:
```yaml
apiVersion: getambassador.io/v3alpha1
@@ -122,7 +122,7 @@ data: