--- layout: docs page_title: 'Configuration Entry Kind: Ingress Gateway' sidebar_title: ingress-gateway Beta description: >- The `ingress-gateway` config entry kind allows for configuring Ingress gateways with listeners that expose a set of services outside the Consul service mesh. --- # Ingress Gateway Beta -> **1.8.0+:** This config entry is available in Consul versions 1.8.0 and newer. The `ingress-gateway` config entry kind allows you to configure ingress gateways with listeners that expose a set of services outside the Consul service mesh. See [Ingress Gateway](/docs/connect/ingress-gateway) for more information. ~> [Configuration entries](/docs/agent/config-entries) are global in scope. A configuration entry for a gateway name applies across all federated Consul datacenters. If ingress gateways in different Consul datacenters need to route to different sets of services within their datacenter then the ingress gateways **must** be registered with different names. See [Ingress Gateway](/docs/connect/ingress-gateway) for more information. ## Wildcard service specification Ingress gateways can optionally target all services within a Consul namespace by specifying a wildcard `*` as the service name. A wildcard specifier allows for a single listener to route traffic to all available services on the Consul service mesh, differentiating between the services by their host/authority header. A wildcard specifier provides the following properties for an ingress gateway: - All services with the same [protocol](/docs/agent/config-entries/ingress-gateway#protocol) as the listener will be routable. - The ingress gateway will route traffic based on the host/authority header, expecting a value matching `.ingress.*`, or if using namespaces, `.ingress..*`. A wildcard specifier cannot be set on a listener of protocol `tcp`. ## Sample Config Entries Set up a TCP listener for a single service: ```hcl Kind = "ingress-gateway" Name = "ingress-service" Listeners = [ { Port = 3456 Protocol = "tcp" Services = [ { Name = "db" } ] } ] ``` Set up a wildcard HTTP listener to proxy traffic to all available services, make two services available over a custom port with user-provided hosts, and enable TLS on every listener: ```hcl Kind = "ingress-gateway" Name = "ingress-service" TLS { Enabled = true } Listeners = [ { Port = 8080 Protocol = "http" Services = [ { Name = "*" } ] }, { Port = 4567 Protocol = "http" Services = [ { Name = "api" Hosts = ["foo.example.com"] }, { Name = "web" Hosts = ["website.example.com"] } ] } ] ``` ## Available Fields - `Kind` - Must be set to `ingress-gateway` - `Name` `(string: )` - Set to the name of the gateway being configured. - `Namespace` `(string: "default")` - Specifies the namespace the config entry will apply to. This must be the namespace the gateway is registered in. If omitted, the namespace will be inherited from [the request](/api/config#ns) or will default to the `default` namespace. - `TLS` `(TLSConfig: )` - TLS configuration for this gateway. - `Enabled` `(bool: false)` - Set this configuration to enable TLS for every listener on the gateway. - `Listeners` `(array: )` - A list of listeners that the ingress gateway should setup, uniquely identified by their port number. - `Port` `(int: 0)` - The port that the listener should receive traffic on. - `Protocol` `(string: "tcp")` - The protocol associated with the listener. This can be any protocol supported by [service-defaults](/docs/agent/config-entries/service-defaults#protocol). - `Services` `(array: )` - A list of services to be exposed via this listener. For "tcp" listeners, only a single service is allowed. - `Name` `(string: "")` - The name of the service that should be exposed through this listener. This can be either a service registered in the catalog, or a service defined only by [other config entries](/docs/connect/l7-traffic-management). If the wildcard specifier, `*`, is provided, then ALL services will be exposed through the listener. This is not supported for listener's with protocol "tcp". - `Namespace` `(string: "")` - The namespace to resolve the service from instead of the current namespace. If empty the current namespace is assumed. - `Hosts` `(array: )` - A list of hosts that specify what requests will match to this service. This cannot be used with a `tcp` listener, and cannot be specified alongside a `*` service name. If TLS is enabled, then each host will be added as a DNSSAN to the gateway's x509 certificate. ## ACLs Configuration entries may be protected by [ACLs](https://learn.hashicorp.com/consul/security-networking/production-acls). Reading an `ingress-gateway` config entry requires `service:read` on the `Name` field of the config entry. Creating, updating, or deleting an `ingress-gateway` config entry requires `operator:write`.