Partition Exports
v1.11.0+: This config entry is supported in Consul versions 1.11.0+.
You can configure Consul to export services contained in an admin partition to one or more additional partitions by declaring the partition-exports
configuration entry in the kind
field. This enables you to route traffic between services in different clusters that share a single set of Consul servers.
You can configure the settings defined in the partition-exports
configuration entry to apply to all namespaces and federated datacenters.
Requirements
- A Consul Enterprise binary
- A partition that corresponds to the configuration entry. As in, the partition exports config entry for partition “frontend” requires that the “frontend” partition exists
- Verify that your datacenter meets the conditions specified in the .
- Specify the
partition-exports
configuration in the agent configuration file (see config_entries) as described in . - Apply the configuration using one of the following methods:
- Kubernetes CRD: Refer to the Custom Resource Definitions documentation for details.
- Issue the
consul config write
command: Refer to the documentation for details.
Configuration
Configure the following parameters to define a partition-exports
configuration entry:
Partition exports configuration syntax
HCL
- HCL
- Kubernetes YAML
- JSON
apiVersion: consul.hashicorp.com/v1alpha1
Kind: PartitionExports
Partition: <partition containing services to export>
Services:
- Consumers:
- Partition: <name of the partition that will dial the exported service>
Name: <name of service to export>
Namespace: <namespace in the partition containing the service to export>
The following table describes the parameters associated with the partition-exports
configuration entry.
Services
The Services
parameter contains one or more lists of parameters that specify which services to export, which namespaces the services reside, and the destination partition for the exported services. Each list in the Services
block must contain the following parameters:
- Name: Specifies the name of the service to export. You can use a asterisk wildcard (
*
) to include all services in the namespace. - : Specifies one ore more objects that identify a destination partition for the exported services.
The following example configures the agent to export the billing
service from the default
namespace of the finance
admin partition to the and backend
partitions. Additionally, all services in all namespaces within the finance
partition will be exported to the monitoring
partition.
- HCL
- Kubernetes YAML
- JSON
Kind = "partition-exports"
Partition = "finance"
Services = [
{
Name = "billing"
Namespace = "default"
Consumers = [
{
Partition = "frontend"
},
{
Partition = "backend"
}
]
},
{
Name = "*"
Namespace = "*"
Consumers = [
{
Partition = "monitoring"
}
}
]
"Kind": "partition-exports",
"Partition": "finance",
{
"Consumers": [
{
"Partition": "frontend"
},
{
"Partition": "backend"
}
],
"Name": "billing",
"Namespace": "default"
},
{
"Consumers": [
{
"Partition": "monitoring"
}
],
"Name": "*",
"Namespace": "*"
}
]
Reading Services
When an exported service has been imported to another partition, you can use the health
REST API endpoint to query the service on the consumer partition. The following example queries the finance
partition for the imported billing
service:
An ACL token with service:write
permissions is required for the partition from which the query is made. If the call in the previous example is made from a service named web
in a partition named frontend
, then the request will require a token with write
permissions to web
in the frontend
partition.
Exports are available to all services in the consumer partition. In the previous example, any service with permissions for the frontend
partition will be able to read exports.
See for additional information.