--- layout: commands page_title: 'Commands: Connect Expose' description: > The connect expose subcommand is used to expose a mesh-enabled service through an Ingress gateway by modifying the gateway's configuration and adding an intention to allow traffic from the gateway to the service. --- # Consul Connect Expose Command: `consul connect expose` The connect expose subcommand is used to expose a mesh-enabled service through an Ingress gateway by modifying the gateway's configuration and adding an intention to allow traffic from the gateway to the service. See the [Ingress gateway documentation](/consul/docs/connect/gateways/ingress-gateway) for more information about Ingress gateways. ```text Usage: consul connect expose [options] Exposes a mesh-enabled service through the given ingress gateway, using the given protocol and port. ``` #### Command Options - `-ingress-gateway` - (Required) The name of the ingress gateway service to use. A partition and namespace can optionally be specified as a prefix via the '[[partition/]namespace]/service' format. If a partition is not specified 'default' is assumed. If a partition is specified a namespace must be specified. Partitions and namespaces are Enterprise features. - `-port` - (Required) The listener port to use for the service on the Ingress gateway. - `-service` - (Required) The name of destination service to expose. A namespace can optionally be specified as a prefix via the '[[partition/]namespace]/service' format. If a partition is not specified 'default' is assumed. If a partition is specified a namespace must be specified. Partitions and namespaces are Enterprise features. - `-protocol` - The protocol for the service. Defaults to 'tcp'. - `-host` - Additional DNS hostname to use for routing to this service. Can be specified multiple times. #### API Options @include 'http_api_options_client.mdx' @include 'http_api_options_server.mdx' ## Examples The example below shows using the `expose` command to make the `foo` service available through the Ingress gateway service `ingress`. The protocol argument is optional and defaults to `tcp` if not provided. ```shell-session $ consul connect expose -service=foo -ingress-gateway=ingress -port 8888 -protocol=tcp Successfully updated config entry for ingress service "ingress" Successfully set up intention for "ingress" -> "foo" ``` Running the command again when the config entry/intention are already set up will result in a no-op: ```shell-session $ consul connect expose -service=foo -ingress-gateway=ingress -port 8888 -protocol=tcp Service "foo" already exposed through listener with port 8888 Intention already exists for "ingress" -> "foo" ```