IMPROVEMENTS
- FIPS: Migrate FIPS builds from FIPS 140-2 (BoringCrypto via
GOEXPERIMENT=boringcrypto/cgo) to FIPS 140-3 using the in-tree Go Cryptographic Module. FIPS builds now useCGO_ENABLED=0 GOFIPS140=v1.0.0(CMVP Certificate #5247) withGODEBUG=fips140=onbaked into the binary, dropping cgo and the arm64 cross-compiler. The build metadata suffix changes from+fips1402to+fips1403.
SECURITY
- Upgrade
golang.org/x/crypto,golang.org/x/net, andgolang.org/x/systo address CVEs in transitive dependencies. [GH-345] - Update
go-discovertov1.3.0in Dockerfile to mitigate CVEs in dependencies. [GH-348]
FEATURES
- Add
consecutive5xx,enforcingConsecutiveGatewayFailure, andmaxEjectionPercentfields to the outlier detection configuration schema, enabling gateway failure detection and fine-grained ejection percentage control for passive health checks. [GH-321]
BUG FIXES
- Fix health-sync logic to correctly accumulate and apply health check statuses for all registered containers, including the
consul-dataplanecontainer. [GH-320]
IMPROVEMENTS
- health-sync: batch all Consul health check updates into a single atomic
Catalog.Registercall instead of issuing one request per check, reducing write amplification and improving consistency. [GH-338 / HEAD] - Bump Go version to
1.26.4. [GH-348] - Bump
go-discovertov1.3.0. [GH-348] - Upgrade
consul-apito 1.34.4 andserfto 0.10.4. [GH-356] - Upgrade AWS SDK v2 dependencies to latest versions. [GH-357]
- Expand test matrix to include latest Consul CE and Enterprise versions for compatibility testing. [GH-346]
SECURITY
- Update Dockerfile to use Alpine 3.23 and run full
apk upgradeto mitigate multiple vulnerable packages including curl, gnupg, openssl, sqlite-libs, busybox, and others identified by Wiz security scan ([CVE-2025-14819], [CVE-2025-14524], [CVE-2025-14017], [CVE-2025-30258], and related CVEs). - Update go-discover to use latest pinned commit
838b57eto mitigate multiple vulnerabilities in dependencies includinggolang.org/x/crypto,golang.org/x/net,golang.org/x/oauth2, andgithub.com/sirupsen/logrus.
FEATURES
- Add network partition resilience configuration support for ECS services via outlier detection in Envoy. Services can now automatically eject unhealthy upstream instances from the load balancing pool based on consecutive failures through passive health checks configured via Consul service defaults. [GH-313]
IMPROVEMENTS
- AWS SDK Migration: Migrated core AWS integration from SDK v1 to SDK v2. This improves performance, reduces memory overhead, and adopts modern Go patterns (Context support, non-pointer slice types).
- Bump Go version to
1.25.8 - Expand test coverage to include Consul 1.21.5 and 1.21.9+ent (enterprise) versions
SECURITY
- Upgrade
golang.org/x/cryptotov0.45.0to address [GO-2025-4134] and [GO-2025-4116]
IMPROVEMENTS
- Bump Go version to
1.25.5 - Bump
golang.org/x/nettov0.47.0 - Bump
golang.org/x/systov0.38.0 - Bump
golang.org/x/texttov0.31.0
BUG FIXES
- Fix bug where health-sync race condition overrides consul-dataplane critical status after a sigterm
IMPROVEMENTS
Bump x/net to 0.38.0
BUG FIXES
- Fix bug where calls to AWS IAM and STS services error out due to URL with multiple trailing slashes.
SECURITY
- Upgrade go version to
1.23.6and crypto to0.35.0to address CVE-2025-22869
IMPROVEMENTS
- Remove info logs from health sync checks
BUG FIXES
- Fix the issue where the service was accepting traffic even though it wasn't healthy. This fix updates the health check status for
consul-dataplanecontainer and takes into account the health of the service container as well.
IMPROVEMENTS
- Bump Go version to
1.22.7 - Bump Go version to
1.22.5 - Bump Go version to
1.22.4 - Bump Go version to
1.22.3
SECURITY
- Upgrade go version to
1.22.5to address CVE-2024-24791 - Upgrade go-retryablehttp to address CVE-2024-6104
BUG FIXES
- Update
google.golang.org/protobufto v1.33.0 andgithub.com/golang/protobufto v1.5.4 to address CVE-2024-24786. [GH-240] - Fix
mesh-initlocal executable copying in dynamically-linked execution contexts [GH-242]
IMPROVEMENTS
- Bump Go version to
1.21.10 - Bump
x/netto0.23.0
BREAKING CHANGES
- Following are the changes made to the
control-planecontainer- Rename
control-planesubcommand tomesh-init. [GH-209] - Removes a lot of functionalities from
control-plane[GH-207] mesh-initwill be a short lived container with the following responsibities- Perform Consul login and obtain a ACL token.
- Register the service and sidecar proxy to Consul catalog.
- Write ECS binary to shared volume.
- Prepare and write Consul Dataplane configuration to a shared volume.
mesh-initunlikecontrol-planeno longer writes the login token to a shared volume and passes it on to theConsul-dataplanecontainer. It instead generates the login configuration needed to get a Consul ACL token and writes it as part of the Consul dataplane configuration to a shared volume. Dataplane uses the login configuration to mint the token with the required permissions.[GH-208]
- Rename
- Adds a new command
health-syncwith the following responsibilities [GH-210]- Perform Consul login and obtain an ACL token.
- Setup the Consul client to talk directly to the server.
- Accumulate all the health checks associated with the service and the proxy which would have been previously registered as
criticalbymesh-init - Enters into a long running reconciliation loop where it
- Periodically syncs back ECS container health status into Consul.
- Marks all service and proxy checks as critical upon receiving SIGTERM.
- Listens to changes to the Consul servers and reconfigures the Consul client if at all the server details change.
- Gracefully shuts down(upon receiving SIGTERM) making sure that the Consul Dataplane has terminated properly and then proceeds with deregistering the service and proxy and performs a Consul logout to invalidate the ACL token.
- The
transparentProxy.enabledfield defaults totrueif not specified. Transparent proxy is not yet supported for FARGATE based launch types. When performing upgrades from previous versions of Consul ECS, care must be taken to always passfalsefor thetransparentProxy.enabledfield for FARGATE launch types to ensure thatmesh-initprocess doesn't fail due to insufficient privileges when applying traffic redirection rules
FEATURES
- Transparent proxy support for ECS EC2 launch type [GH-212]
- Add a
transparentProxystanza to theECS_CONFIG_JSONschema to control traffic redirection settings for the ECS task.[GH-171] - Enable support for Consul DNS within the ECS task via the
transparentProxy.consulDNSstanza. When enabled, Consul Dataplane starts up a DNS server on port 8600 and proxies DNS queries to the Consul DNS server. The/etc/resolv.conffile of the ECS task is also modified to make sure that127.0.0.1is the first nameserver in the list.[GH-170] - Adds a
redirecttrafficpackage that invokes theiptablesSDK of Consul which internally applies the traffic redirection rules needed to properly setup transparent proxy within the ECS task. [GH-173] - The mesh-init process, in addition to registering service and proxy to Consul, also invokes the required modules to apply traffic redirection rules and set up Consul DNS within the ECS task. [GH-174]
- Add a
- API and terminating gateways
- Add support for configuring API and terminating gateways as ECS tasks [GH-192]
- Add following changes to the controller to support API gateways in ACL enabled clusters [GH-198]
- Create the
consul-ecs-api-gateway-roleACL role andconsul-ecs-api-gateway-policyACL policy. - Add a new IAM entity tag
consul.hashicorp.name.gateway-kindto the existing service auth method's config. - Add a new binding rule specific to API gateway that helps binding the API gateway's ACL token to the preconfigured
consul-ecs-api-gateway-role
- Create the
- Add following changes to the controller to support Terminating gateways in ACL enabled clusters [GH-199]
- Create the
consul-ecs-terminating-gateway-roleACL role. This role will be assigned to the ACL token obtained by the terminating gateway task after performing a Consul login. Users can assign policies to this role via terraform whenever needed. - Add a new binding rule specific to terminating gateways that helps bind the terminating gateway's ACL token to the preconfigured
consul-ecs-terminating-gateway-role
- Create the
IMPROVEMENTS
- Bump Go version to
1.21.6
BUG FIXES
- Fix permissions given to the ACL token generated for a Mesh gateway based ECS task. Following are the changes made to add additional permissions [GH-215]
- Create the
consul-ecs-mesh-gateway-roleACL role andconsul-ecs-mesh-gateway-policyACL policy with themesh:writeandpeering:readpermissions. - Add a new binding rule specific to Mesh gateway that helps binding the Mesh gateway's ACL token to the preconfigured
consul-ecs-mesh-gateway-role
- Create the
IMPROVEMENTS
- Bump Go to
1.21.6
IMPROVEMENTS
- Bump Go to
1.21.6
BUG FIXES
- Fix permissions given to the ACL token generated for a Mesh gateway based ECS task. The controller must be upgraded to this version for the fix to kick in. Following are the changes made to add additional permissions [GH-216]
- Create the
consul-ecs-mesh-gateway-roleACL role andconsul-ecs-mesh-gateway-policyACL policy with themesh:writeandpeering:readpermissions. - Add a new IAM entity tag
consul.hashicorp.name.gateway-kindto the existing service auth method's config. - Add a new binding rule specific to Mesh gateway that helps binding the Mesh gateway's ACL token to the preconfigured
consul-ecs-mesh-gateway-role
- Create the
BUG FIXES
- Fixes a bug which prevented graceful shutdown of the Consul dataplane container. [GH-200]
BREAKING CHANGES
- Adopt the architecture described in Simplified Service Mesh with Consul Dataplane: [GH-161]
- Consul client agents are no longer used.
- Consul Dataplane must be run in place of Envoy in each ECS task. Consul Dataplane manages the Envoy process and proxies xDS requests from Envoy to Consul servers.
- The
consul-ecsbinary now communicates with Consul servers using HTTP(S) and GRPC. - Services are registered directly with the central catalog on the Consul servers. Services in the same ECS cluster are registered to the same Consul node name.
- Remove the
mesh-initandhealth-synccommands, and add a unifiedcontrol-planecommand to replace them. Thecontrol-planecommand starts a long running process with the following responsibilities:- Automatically (re)discover and (re)connect to Consul servers using connection manager. The
consulServer.hostsconfig option supports an IP, DNS name, or anexec=string specifying a command that returns a list of IP addresses. [GH-143] - Make an ACL Login request to obtain an ACL token when using the Consul AWS IAM auth method.
- Register the service and sidecar proxy with the central catalog on the Consul servers.[GH-144]
- Write the configuration for Consul Dataplane to a file on a shared volume. [GH-145]
- Sync ECS health check statuses for the ECS task into the central catalog on the Consul servers on a periodic basis.[GH-146]
- Gracefully shutdown when an ECS task is stopped. Upon receiving a SIGTERM, mark synced health checks critical and wait for Consul Dataplane to stop. Then remove health checks, services, and perform an ACL Logout if necessary.[GH-147]
- Automatically (re)discover and (re)connect to Consul servers using connection manager. The
- controller: Add a new
controllercommand in place of theacl-controllercommand with the following changes:- Remove all CLI flags. Configuration is read from the
ECS_CONFIG_JSONenvironment variable.[GH-150] - Automatically (re)discover and (re)connect to Consul servers, similar to the
control-planecommand. - Because Consul client agents are no longer used, the controller no longer configures the "client" auth method, policy, role, and binding rule which previously enabled Consul client agents to login.
- Register the ECS cluster as a synthetic node in the central catalog on the Consul servers. The synthetic node is used to register services running in the ECS cluster.
- Ensure leftover tokens and services are removed for ECS tasks that have stopped.[GH-153]
- Remove all CLI flags. Configuration is read from the
- Changes to
ECS_CONFIG_JSONschema.- Remove the
consulHTTPAddrandconsulCACertFilefields. - Add the
consulLogin.datacenterfield. - Add the
controllerfield to support configuring the newcontrollercommand. - Add the
consulServersfield to specify the Consul server location and protocol-specific settings. - The
consulServers.hostsfield is required. This specifies the Consul server location as an IP address, DNS name, orexec=string specifying a command that returns a list of IP addresses. To use cloud auto-join, use anexec=string to run thediscoverCLI. For example, the following string invokes the discover CLI with a cloud auto-join string:exec=discover -q addrs provider=aws region=us-west-2 tag_key=consul-server tag_value=true. ThediscoverCLI is included in the Consul ECS and Consul Dataplane images by default. - Remove the
service.checksfield. Consul agent health checks are no longer supported because Consul client agents are not used. Instead, set thehealthSyncContainersfield to haveconsul-ecssync ECS health checks into Consul. - Add the
proxy.healthCheckPortfield which can be hit to determine Envoy's readiness. - Add the
proxy.upstreams.destinationPeerfield to enable the proxy to hit upstreams present in peer Consul clusters. - Add the
meshGateway.healthCheckPortfield which can be hit to determine Envoy's readiness. - Add the
proxy.localServiceAddressfield to configure Envoy to use a different address for the local service.
- Remove the
- Add the go-discover binary to the Consul ECS image to better support cloud auto-join.[GH-160]
FEATURES
- Use the
AWS_REGIONcontainer environment variable andAvailabilityZoneattribute of an ECS task meta JSON to set the locality parameters in Consul service and proxy registrations. These parameters are used to perform locality aware routing for Consul Enterprise installations. [GH-167]
IMPROVEMENTS
- Bump Golang to 1.20
IMPROVEMENTS
- Bump Go to
1.20
FEATURES
- net-dial: Add new
consul-ecs net-dialsubcommand to support ECS health checks whenncis not available in the container image. [GH-135] - acl-controller: Add support for Consul 1.15.x. [GH-133]
- mesh-init: Add
proxy.publicListenerPortconfig option to set Envoy's public listener port.
BREAKING CHANGES
- Remove
consulLogin.extraLoginFieldsconfig option. The Consul Login API is used directly instead of theconsul loginCLI command for logging into the AWS IAM auth method. Addmeta,region,stsEndpoint, andserverIdHeaderValuefields to theconsulLoginconfig object. [GH-115]
BUG FIXES:
- Fix the description of the anonymous token policy so that it exactly matches the description
created by
consul-k8s. This fixes a connectivity issue that occurs whenconsul-k8sandconsul-ecsdeployments are connected to the same Consul datacenter. [GH-114]
BREAKING CHANGES
- Update
acl-controllerto cleanup ACL tokens created from Consul's AWS IAM auth method. Remove-secret-name-prefixand-consul-client-secret-arnflags. The controller no longer creates ACL tokens. [GH-82] - A lower case service name is required by
mesh-initandhealth-sync. When theservice.namefield is specified, it must be a valid name for a Consul service identity. Otherwise, ifservice.nameis not specified, the lower-cased task family is used for the Consul service name. [GH-97]
FEATURES
- Add
-log-levelflag toacl-controller,envoy-entrypoint, andapp-entrypointcommands. AddlogLevelfield to config JSON formesh-initandhealth-synccommands. [GH-67] - Support obtaining ACL tokens from Consul's AWS IAM auth method. This requires Consul 1.12.0+.
mesh-initnow does aconsul loginto obtain a token ifconsulLogin.enabled = true.health-syncdoes aconsul logoutduring shutdown to destroy these tokens. AddconsulHTTPAddr,consulCACertFile, andconsulLoginfields to the config JSON. [GH-69] [GH-76] [GH-77] - Update
acl-controllerto configure Consul's AWS IAM auth method at startup. Add-iam-role-pathflag to specify the path of IAM roles permitted to login. [GH-71]
IMPROVEMENTS
consul-ecs versionnow includes the git commit sha. [GH-85]
DEPRECATIONS
- Only release Linux builds since this binary is only used in Linux containers. Windows, Darwin, FreeBSD, and Solaris builds are no longer published to releases.hashicorp.com. [GH-91]
BUG FIXES:
- Fix issue in the
acl-controllercommand where namespaces are not created in the correct partition when using Consul 1.12. [GH-72] - Fix note text for synced Consul health checks. [GH-80]
- Fix issue where the
acl-controllerdid not update the default namespace with the cross-namespace policy. [GH-104] - Fix token cleanup in the
acl-controllerwhen Consul Enterprise admin partitions are enabled. [GH-105] - The
acl-controllerconfigures the anonymous token withservice:readandnode:readpermissions to support cross-dc or cross-partition traffic through mesh gateways. [GH-103] [GH-106]
This is a patch release that keeps the consul-ecs project in sync with the terraform-aws-consul-ecs project.
FEATURES
- Add support for admin partitions and namespaces (Consul Enterprise). [GH-61]
BREAKING CHANGES
- mesh-init, health-sync: Switch to file-based config. All CLI flags and options are removed
from the
mesh-initandhealth-synccommands. Instead, use theCONSUL_ECS_CONFIG_JSONenvironment variable to pass JSON configuration which follows this schema. [GH-53] [GH-54]
FEATURES
- Add a
app-entrypointsubcommand which can be used to delay application shutdown after receing a TERM signal to support graceful shutdown in ECS. [GH-48] - Update
github.com/hashicorp/consul/apipackage tov1.12.0to support passing service registration fields for admin partitions and h2ping checks. [GH-59]
BREAKING CHANGES
consul-ecsdocker images no longer have theconsulbinary. The mesh-init subcommand still expects theconsulbinary on the$PATH. [GH-40]- mesh-init: The
-envoy-bootstrap-fileoption is removed, and replaced with-envoy-bootstrap-dir. The Envoy bootstrap config file is written toenvoy-bootstrap.jsonwithin that directory. [GH-42]
FEATURES
- Add a
health-syncsubcommand to sync ECS health checks into Consul. [GH-33] - Add the
-health-sync-containersflag tomesh-init. [GH-36] - Add
-tags,-service-nameand-metaflags tomesh-init. [GH-41] - Add the
-service-nameflag tohealth-sync. [GH-43] - The ACL controller now reads the Consul service name from the
consul.hashicorp.com/service-nametag on the ECS task. If the tag does not exist, it uses the Task family as the Consul service name. [GH-44] - Add a
envoy-entrypointsubcommand, which can be used as the entrypoint to the Envoy container running in ECS to support graceful shutdown. [GH-42]
BUG FIXES:
IMPROVEMENTS
- Clean up ACL tokens for services/task families that are deleted. [GH-30]
- Change the owner of
/consulin the Docker image toconsul-ecs. This allowsmesh-initto run asconsul-ecsrather thanroot. [GH-37]
FEATURES
- mesh-init: Add
-checksoption to register service health checks. [GH-29]
BREAKING CHANGES
- Remove
discover-serverscommand. Due to the many changes made for beta, upgrading is not supported. We recommend doing an uninstall and reinstall of the Terraform module. [GH-21]
FEATURES
- Add a new command called
acl-controller. The command will first create the token for the Consul client and then will start a controller to manage service tokens. [GH-22]
IMPROVEMENTS
- AWS client discovers the current region, if unset, from ECS Task Metadata. [GH-20]
IMPROVEMENTS
- Fix Docker image to build off of
hashicorp/consul:1.9.5
IMPROVEMENTS
- Docker image contains Consul 1.9.5 binary.
Initial release