-
Notifications
You must be signed in to change notification settings - Fork 4.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Peering Mesh Gateway Updates for GA #15344
Merged
Merged
Changes from 1 commit
Commits
Show all changes
6 commits
Select commit
Hold shift + click to select a range
6c3cc13
docs(peering): remove beta references
DanStough 6654142
[skip ci] update test coverage
hc-github-team-consul-core bd0d963
Update website/content/docs/connect/cluster-peering/index.mdx
DanStough 147f942
docs(peering): mesh gateway updates and refactor for GA
DanStough 8d3a64f
Update website/content/docs/connect/gateways/mesh-gateway/peering-via…
DanStough 9b9d704
Merge branch 'main' into dans/NET-640/peering-mesh-gateway-ga-content
DanStough File filter
Filter by extension
Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
256 changes: 256 additions & 0 deletions
256
website/content/docs/connect/gateways/mesh-gateway/index.mdx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,256 @@ | ||
--- | ||
layout: docs | ||
page_title: Mesh Gateways | ||
description: >- | ||
Mesh gateways are specialized proxies that route data between services that cannot communicate directly. Learn how mesh gateways are used in different Consul configurations. | ||
--- | ||
|
||
# Mesh Gateways | ||
|
||
Mesh gateways enable service mesh traffic to be routed between different Consul datacenters. | ||
Datacenters can reside in different clouds or runtime environments where general interconnectivity between all services in all datacenters isn't feasible. | ||
|
||
## Prerequisites | ||
|
||
Mesh gateways can be used with any of the following Consul configrations for managing separate datacenters or partitions. | ||
|
||
1. WAN Federation | ||
* [Mesh gateways can be used to route service-to-service traffic between datacenters](/docs/connect/gateways/mesh-gateway/service-to-service-traffic-wan-datacenters) | ||
* [Mesh gateways can be used to route all WAN traffic, including from Consul servers](/docs/connect/gateways/mesh-gateway/wan-federation-via-mesh-gateways) | ||
2. Cluster Peering | ||
* [Mesh gateways can be used to route service-to-service traffic between datacenters](/docs/connect/gateways/mesh-gateway/service-to-service-traffic-peers) | ||
* [Mesh gateways can be used to route control-plane traffic from Consul servers](/docs/connect/gateways/mesh-gateway/peering-via-mesh-gateways) | ||
3. Admin Partitions | ||
* [Mesh gateways can be used to route service-to-service traffic between admin partitions in the same Consul datacenter](/docs/connect/gateways/mesh-gateway/service-to-service-traffic-partitions) | ||
|
||
### Consul | ||
|
||
Review the [specific guide](#prerequisites) for your use case to determined the required version of Consul. | ||
|
||
### Network | ||
|
||
* General network connectivity to all services within its local Consul datacenter. | ||
* General network connectivity to all mesh gateways within remote Consul datacenters. | ||
|
||
### Proxy | ||
|
||
Envoy is the only proxy with mesh gateway capabilities in Consul. | ||
|
||
Mesh gateway proxies receive their configuration through Consul, which automatically generates it based on the proxy's registration. | ||
Consul can only translate mesh gateway registration information into Envoy configuration. | ||
|
||
Sidecar proxies that send traffic to an upstream service through a gateway need to know the location of that gateway. They discover the gateway based on their sidecar proxy registrations. Consul can only translate the gateway registration information into Envoy configuration. | ||
|
||
Sidecar proxies that do not send upstream traffic through a gateway are not affected when you deploy gateways. If you are using Consul's built-in proxy as a Connect sidecar it will continue to work for intra-datacenter traffic and will receive incoming traffic even if that traffic has passed through a gateway. | ||
|
||
## Configuration | ||
|
||
Configure the following settings to register the mesh gateway as a service in Consul. | ||
|
||
* Specify `mesh-gateway` in the `kind` field to register the gateway with Consul. | ||
* Configure the `proxy.upstreams` parameters to route traffic to the correct service, namespace, and datacenter. Refer to the [`upstreams` documentation](/docs/connect/registration/service-registration#upstream-configuration-reference) for details. The service `proxy.upstreams.destination_name` is always required. The `proxy.upstreams.datacenter` must be configured to enable cross-datacenter traffic. The `proxy.upstreams.destination_namespace` configuration is only necessary if the destination service is in a different namespace. | ||
* Define the `Proxy.Config` settings using opaque parameters compatible with your proxy (i.e., Envoy). For Envoy, refer to the [Gateway Options](/docs/connect/proxies/envoy#gateway-options) and [Escape-hatch Overrides](/docs/connect/proxies/envoy#escape-hatch-overrides) documentation for additional configuration information. | ||
* If ACLs are enabled, a token granting `service:write` for the gateway's service name and `service:read` for all services in the datacenter or partition must be added to the gateway's service definition. These permissions authorize the token to route communications for other Consul service mesh services, but does not allow decrypting any of their communications. | ||
|
||
### Modes | ||
|
||
Each upstream associated with a service mesh proxy can be configured so that it is routed through a mesh gateway. | ||
Depending on your network, the proxy's connection to the gateway can operate in one of the following modes: | ||
|
||
* `none` - No gateway is used and a service mesh connect proxy makes its outbound connections directly | ||
to the destination services. This is the default for WAN federation. This setting is invalid for peered clusters | ||
and will be treated as remote instead. | ||
|
||
* `local` - The service mesh connect proxy makes an outbound connection to a gateway running in the | ||
same datacenter. That gateway is responsible for ensuring that the data is forwarded to gateways in the destination datacenter. | ||
|
||
* `remote` - The service mesh proxy makes an outbound connection to a gateway running in the destination datacenter. | ||
The gateway forwards the data to the final destination service. This is the default for peered clusters. | ||
|
||
### Connect Proxy Configuration | ||
|
||
Set the proxy to the preferred [mode](#modes) to configure the service mesh proxy. You can specify the mode globally or within child configurations to control proxy behaviors at a lower level. Consul recognizes the following order of precedence if the gateway mode is configured in multiple locations the order of precedence: | ||
|
||
1. Upstream definition (highest priority) | ||
2. Service instance definition | ||
3. Centralized `service-defaults` configuration entry | ||
4. Centralized `proxy-defaults` configuration entry | ||
|
||
## Example Configurations | ||
|
||
Use the following example configurations to help you understand some of the common scenarios. | ||
|
||
### Enabling Gateways Globally | ||
|
||
The following `proxy-defaults` configuration will enable gateways for all Connect services in the `local` mode. | ||
|
||
<CodeTabs heading="Example: Enabling gateways globally."> | ||
|
||
```hcl | ||
Kind = "proxy-defaults" | ||
Name = "global" | ||
MeshGateway { | ||
Mode = "local" | ||
} | ||
``` | ||
|
||
```yaml | ||
Kind: proxy-defaults | ||
MeshGateway: | ||
- Mode: local | ||
Name: global | ||
``` | ||
</CodeTabs> | ||
|
||
### Enabling Gateways Per Service | ||
|
||
The following `service-defaults` configuration will enable gateways for all Connect services with the name `web`. | ||
|
||
<CodeTabs heading="Example: Enabling gateways per service."> | ||
|
||
```hcl | ||
Kind = "service-defaults" | ||
Name = "web" | ||
MeshGateway { | ||
Mode = "local" | ||
} | ||
``` | ||
|
||
```yaml | ||
Kind: service-defaults | ||
MeshGateway: | ||
- Mode: local | ||
Name: web | ||
``` | ||
|
||
</CodeTabs> | ||
|
||
### Enabling Gateways for a Service Instance | ||
|
||
The following [Proxy Service Registration](/docs/connect/registration/service-registration) | ||
definition will enable gateways for the service instance in the `remote` mode. | ||
|
||
<CodeTabs heading="Example: Enabling gateways for a service instance."> | ||
|
||
```hcl | ||
service { | ||
name = "web-sidecar-proxy" | ||
kind = "connect-proxy" | ||
port = 8181 | ||
proxy { | ||
destination_service_name = "web" | ||
mesh_gateway { | ||
mode = "remote" | ||
} | ||
upstreams = [ | ||
{ | ||
destination_name = "api" | ||
datacenter = "secondary" | ||
local_bind_port = 10000 | ||
} | ||
] | ||
} | ||
} | ||
|
||
# Or alternatively inline with the service definition: | ||
|
||
service { | ||
name = "web" | ||
port = 8181 | ||
connect { | ||
sidecar_service { | ||
proxy { | ||
mesh_gateway { | ||
mode = "remote" | ||
} | ||
upstreams = [ | ||
{ | ||
destination_name = "api" | ||
datacenter = "secondary" | ||
local_bind_port = 10000 | ||
} | ||
] | ||
} | ||
} | ||
} | ||
} | ||
``` | ||
|
||
```yaml | ||
service: | ||
- kind: connect-proxy | ||
name: web-sidecar-proxy | ||
port: 8181 | ||
proxy: | ||
- destination_service_name: web | ||
mesh_gateway: | ||
- mode: remote | ||
upstreams: | ||
- datacenter: secondary | ||
destination_name: api | ||
local_bind_port: 100 | ||
``` | ||
|
||
</CodeTabs> | ||
|
||
### Enabling Gateways for a Proxy Upstream | ||
|
||
The following service definition will enable gateways in the `local` mode for one upstream, the `remote` mode for a second upstream and will disable gateways for a third upstream. | ||
|
||
<CodeTabs heading="Example: Enabling gateways for a proxy upstream."> | ||
|
||
```hcl | ||
service { | ||
name = "web-sidecar-proxy" | ||
kind = "connect-proxy" | ||
port = 8181 | ||
proxy { | ||
destination_service_name = "web" | ||
upstreams = [ | ||
{ | ||
destination_name = "api" | ||
local_bind_port = 10000 | ||
mesh_gateway { | ||
mode = "remote" | ||
} | ||
}, | ||
{ | ||
destination_name = "db" | ||
local_bind_port = 10001 | ||
mesh_gateway { | ||
mode = "local" | ||
} | ||
}, | ||
{ | ||
destination_name = "logging" | ||
local_bind_port = 10002 | ||
mesh_gateway { | ||
mode = "none" | ||
} | ||
}, | ||
] | ||
} | ||
} | ||
``` | ||
```yaml | ||
service: | ||
- kind: connect-proxy | ||
name: web-sidecar-proxy | ||
port: 8181 | ||
proxy: | ||
- destination_service_name: web | ||
upstreams: | ||
- destination_name: api | ||
local_bind_port: 10000 | ||
mesh_gateway: | ||
- mode: remote | ||
- destination_name: db | ||
local_bind_port: 10001 | ||
mesh_gateway: | ||
- mode: local | ||
- destination_name: logging | ||
local_bind_port: 10002 | ||
mesh_gateway: | ||
- mode: none | ||
``` | ||
</CodeTabs> |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is not true for peering.