---
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"
```
