diff --git a/.github/workflows/test-integrations.yml b/.github/workflows/test-integrations.yml
index 66c39591592b..333835d6d08f 100644
--- a/.github/workflows/test-integrations.yml
+++ b/.github/workflows/test-integrations.yml
@@ -22,7 +22,7 @@ env:
GOTESTSUM_VERSION: "1.9.0"
CONSUL_BINARY_UPLOAD_NAME: consul-bin
# strip the hashicorp/ off the front of github.repository for consul
- CONSUL_LATEST_IMAGE_NAME: ${{ endsWith(github.repository, '-enterprise') && github.repository || 'consul' }}
+ CONSUL_LATEST_IMAGE_NAME: ${{ github.repository }}
jobs:
setup:
diff --git a/GNUmakefile b/GNUmakefile
index e84118626e2f..2519185a90dc 100644
--- a/GNUmakefile
+++ b/GNUmakefile
@@ -152,7 +152,7 @@ dev-build:
dev-docker: linux dev-build
@echo "Pulling consul container image - $(CONSUL_IMAGE_VERSION)"
- @docker pull consul:$(CONSUL_IMAGE_VERSION) >/dev/null
+ @docker pull hashicorp/consul:$(CONSUL_IMAGE_VERSION) >/dev/null
@echo "Building Consul Development container - $(CONSUL_DEV_IMAGE)"
@# 'consul:local' tag is needed to run the integration tests
@# 'consul-dev:latest' is needed by older workflows
@@ -171,7 +171,7 @@ remote-docker: check-remote-dev-image-env
$(MAKE) GOARCH=amd64 linux
$(MAKE) GOARCH=arm64 linux
@echo "Pulling consul container image - $(CONSUL_IMAGE_VERSION)"
- @docker pull consul:$(CONSUL_IMAGE_VERSION) >/dev/null
+ @docker pull hashicorp/consul:$(CONSUL_IMAGE_VERSION) >/dev/null
@echo "Building and Pushing Consul Development container - $(REMOTE_DEV_IMAGE)"
@docker buildx use default && docker buildx build -t '$(REMOTE_DEV_IMAGE)' \
--platform linux/amd64,linux/arm64 \
@@ -183,7 +183,7 @@ remote-docker: check-remote-dev-image-env
# should only run in CI and not locally.
ci.dev-docker:
@echo "Pulling consul container image - $(CONSUL_IMAGE_VERSION)"
- @docker pull consul:$(CONSUL_IMAGE_VERSION) >/dev/null
+ @docker pull hashicorp/consul:$(CONSUL_IMAGE_VERSION) >/dev/null
@echo "Building Consul Development container - $(CI_DEV_DOCKER_IMAGE_NAME)"
@docker build $(NOCACHE) $(QUIET) -t '$(CI_DEV_DOCKER_NAMESPACE)/$(CI_DEV_DOCKER_IMAGE_NAME):$(GIT_COMMIT)' \
--build-arg CONSUL_IMAGE_VERSION=$(CONSUL_IMAGE_VERSION) \
diff --git a/build-support/docker/Consul-Dev-Multiarch.dockerfile b/build-support/docker/Consul-Dev-Multiarch.dockerfile
index a3069bd99c65..bb8e50018b25 100644
--- a/build-support/docker/Consul-Dev-Multiarch.dockerfile
+++ b/build-support/docker/Consul-Dev-Multiarch.dockerfile
@@ -1,5 +1,5 @@
ARG CONSUL_IMAGE_VERSION=latest
-FROM consul:${CONSUL_IMAGE_VERSION}
+FROM hashicorp/consul:${CONSUL_IMAGE_VERSION}
RUN apk update && apk add iptables
ARG TARGETARCH
COPY linux_${TARGETARCH}/consul /bin/consul
diff --git a/build-support/docker/Consul-Dev.dockerfile b/build-support/docker/Consul-Dev.dockerfile
index ea4723a02ce6..0b1743cd19ac 100644
--- a/build-support/docker/Consul-Dev.dockerfile
+++ b/build-support/docker/Consul-Dev.dockerfile
@@ -1,4 +1,4 @@
ARG CONSUL_IMAGE_VERSION=latest
-FROM consul:${CONSUL_IMAGE_VERSION}
+FROM hashicorp/consul:${CONSUL_IMAGE_VERSION}
RUN apk update && apk add iptables
COPY consul /bin/consul
diff --git a/test/integration/consul-container/libs/node/consul-container_oss.go b/test/integration/consul-container/libs/node/consul-container_oss.go
index 63d335393af6..eadab48b7b60 100644
--- a/test/integration/consul-container/libs/node/consul-container_oss.go
+++ b/test/integration/consul-container/libs/node/consul-container_oss.go
@@ -3,4 +3,4 @@
package node
-const consulImage = "consul"
+const consulImage = "hashicorp/consul"
diff --git a/website/content/docs/connect/config-entries/exported-services.mdx b/website/content/docs/connect/config-entries/exported-services.mdx
index 0aa37e711e73..93577b489eca 100644
--- a/website/content/docs/connect/config-entries/exported-services.mdx
+++ b/website/content/docs/connect/config-entries/exported-services.mdx
@@ -259,7 +259,7 @@ Services = [
```yaml
apiVersion: consul.hashicorp.com/v1alpha1
-Kind: ExportedServices
+kind: ExportedServices
metadata:
name: default
spec:
@@ -333,7 +333,7 @@ Services = [
```yaml
apiVersion: consul.hashicorp.com/v1alpha1
-Kind: ExportedServices
+kind: ExportedServices
metadata:
name: finance
spec:
@@ -412,7 +412,7 @@ Services = [
```yaml
apiVersion: consul.hashicorp.com/v1alpha1
-Kind: ExportedServices
+kind: ExportedServices
metadata:
name: finance
spec:
@@ -487,7 +487,7 @@ Services = [
```yaml
apiVersion: consul.hashicorp.com/v1alpha1
-Kind: ExportedServices
+kind: ExportedServices
metadata:
name: default
spec:
@@ -549,7 +549,7 @@ Services = [
```yaml
apiVersion: consul.hashicorp.com/v1alpha1
-Kind: ExportedServices
+kind: ExportedServices
metadata:
name: finance
spec:
@@ -613,7 +613,7 @@ Services = [
```yaml
apiVersion: consul.hashicorp.com/v1alpha1
-Kind: ExportedServices
+kind: ExportedServices
metadata:
name: finance
spec:
diff --git a/website/content/docs/enterprise/license/utilization-reporting.mdx b/website/content/docs/enterprise/license/utilization-reporting.mdx
new file mode 100644
index 000000000000..665bb257a1fc
--- /dev/null
+++ b/website/content/docs/enterprise/license/utilization-reporting.mdx
@@ -0,0 +1,172 @@
+---
+page_title: Automated license utilization reporting
+description: >-
+ Learn what data HashiCorp collects to meter Enterprise license utilization. Enable or disable reporting. Review sample payloads and logs.
+---
+
+# Automated license utilization reporting
+
+This topic describes how to enable automated license utilization reporting in Consul Enterprise. This feature automatically sends license utilization data to HashiCorp so that you do not have to manually collect and report it. It also enables you to review your license usage with the monitoring solution you already use, such as Splunk and Datadog, as you optimize and manage your deployments.
+
+## Introduction
+
+You can use automated license utilization report to understand how much additional networking infrastructure you can deploy under your current contract. This feature helps you protect against overutilization and budget for predicted consumption.
+
+Automated reporting shares the minimum data required to validate license utilization as defined in our contracts. This data mostly consists of computed metrics, and it will never contain Personal Identifiable Information (PII) or other sensitive information. Automated reporting shares the data with HashiCorp using a secure unidirectional HTTPS API and makes an auditable record in the product logs each time it submits a report. This process is GDPR-compliant.
+
+## Requirements
+
+Automated license utilization reporting does not support _air-gapped installations_, which are systems with no network interfaces.
+
+The following versions of Consul Enterprise support automated license utilization reporting:
+
+- Patch releases of Consul Enterprise v1.13.9 and newer.
+
+Download a supported release from the [Consul Versions](https://releases.hashicorp.com/consul/) page.
+
+## Enable automated reporting
+
+Before you enable automated reporting, make sure that outbound network traffic is configured correctly and upgrade your enterprise product to a version that supports it. If your installation is air-gapped or network settings are not in place, automated reporting will not work.
+
+To enable automated reporting, complete the following steps:
+
+1. [Allow outbound HTTPS traffic on port 443](#allow-outbound-https-traffic)
+1. [Check product logs](#check-product-logs)
+
+### Allow outbound HTTPS traffic on port 443
+
+Make sure that your network allows HTTPS egress on port 443 from `https://reporting.hashicorp.services` by adding the following IP adddresses to your allow-list:
+
+- `100.20.70.12`
+- `35.166.5.222`
+- `23.95.85.111`
+- `44.215.244.1`
+
+### Check product logs
+
+Automatic license utilization reporting starts sending data within roughly 24 hours. Check the product logs for records that the data sent successfully.
+
+
+
+```
+[DEBUG] beginning snapshot export
+[DEBUG] creating payload
+[DEBUG] marshalling payload to json
+[DEBUG] generating authentication headers
+[DEBUG] creating request
+[DEBUG] sending request
+[DEBUG] performing request: method=POST url=https://census.license.hashicorp.services
+[DEBUG] recording audit record
+[INFO] reporting: Report sent: auditRecord={"payload":{"payload_version":"1","license_id":"d2cdd857-4202-5a45-70a6-e4b531050c34","product":"consul","product_version":"1.16.0-dev+ent","export_timestamp":"2023-05-26T20:09:13.753921087Z","snapshots":[{"snapshot_version":1,"snapshot_id":"0001J724F90F4XWQDSAA76ZQWA","process_id":"01H1CTJPC1S8H7Q45MKTJ689ZW","timestamp":"2023-05-26T20:09:13.753513962Z","schema_version":"1.0.0","service":"consul","metrics":{"consul.billable.nodes":{"key":"consul.billable.nodes","kind":"counter","mode":"write","value":2},"consul.billable.service_instances":{"key":"consul.billable.service_instances","kind":"counter","mode":"write","value":2}}}],"metadata":{}}}
+[DEBUG] completed recording audit record
+[DEBUG] export finished successfully"
+```
+
+
+
+If your installation is air-gapped or your network does not allow the correct egress, the logs show an error.
+
+
+
+```
+[DEBUG] reporting: beginning snapshot export
+[DEBUG] reporting: creating payload
+[DEBUG] reporting: marshalling payload to json
+[DEBUG] reporting: generating authentication headers
+[DEBUG] reporting: creating request
+[DEBUG] reporting: sending request
+[DEBUG] reporting: performing request: method=POST url=https://census.license.hashicorp.services
+[DEBUG] reporting: error status code received: statusCode=403
+```
+
+
+
+In this case, reconfigure your network to allow egress and check the logs again in roughly 24 hours to confirm that automated reporting works correctly.
+
+## Opt out
+
+If your installation is air-gapped or you want to manually collect and report on the same license utilization metrics, you can opt out of automated reporting.
+
+Manually reporting these metrics can be time consuming. Opting out of automated reporting does not mean that you also opt out from sending license utilization metrics. Customers who opt out of automated reporting are still required to manually collect and send license utilization metrics to HashiCorp.
+
+If you are considering opting out because you are worried about the data, we strongly recommend that you review the [example payloads](#example-payloads) before opting out. If you have concerns with any of the automatically reported data, raise these concerns with your account manager.
+
+There are two methods for opting out of automated reporting:
+
+- HCL configuration (recommended)
+- Environment variable (requires restart)
+
+We recommend opting out in your product's configuration file because it does not require a system restart. Add the following block to your `configuration.hcl` or `configuration.json` file.
+
+```hcl
+reporting {
+ license {
+ enabled = false
+ }
+}
+```
+
+When opting out using an environment variable, the system provides a startup message confirming that you have disabled automated reporting. Set the following environment variable to disable automated reporting:
+
+
+
+```shell-session
+$ export OPTOUT_LICENSE_REPORTING=true
+```
+
+
+
+After you set the environment variable, restart your system to complete the process for opting out.
+
+```shell-session
+$ consul reload
+```
+
+
+Check your product logs roughly 24 hours after opting out to make sure that the system is not trying to send reports. Keep in mind that if your configuration file and environment variable differ, the environment variable setting takes precedence.
+
+## Example payloads
+
+HashiCorp collects the following utilization data as JSON payloads:
+`exporter_version` - The version of the licensing exporter
+
+
+
+```json
+{
+ "payload": {
+ "payload_version": "1",
+ "license_id": "d2cdd857-4202-5a45-70a6-e4b531050c34",
+ "product": "consul",
+ "product_version": "1.16.0-dev+ent",
+ "export_timestamp": "2023-05-26T20:09:13.753921087Z",
+ "snapshots": [
+ {
+ "snapshot_version": 1,
+ "snapshot_id": "0001J724F90F4XWQDSAA76ZQWA",
+ "process_id": "01H1CTJPC1S8H7Q45MKTJ689ZW",
+ "timestamp": "2023-05-26T20:09:13.753513962Z",
+ "schema_version": "1.0.0",
+ "service": "consul",
+ "metrics": {
+ "consul.billable.nodes": {
+ "key": "consul.billable.nodes",
+ "kind": "counter",
+ "mode": "write",
+ "value": 2
+ },
+ "consul.billable.service_instances": {
+ "key": "consul.billable.service_instances",
+ "kind": "counter",
+ "mode": "write",
+ "value": 2
+ }
+ }
+ }
+ ],
+ "metadata": {}
+ }
+}
+```
+
+
\ No newline at end of file
diff --git a/website/content/docs/k8s/installation/install.mdx b/website/content/docs/k8s/installation/install.mdx
index df40ac946ea4..d55445c174f6 100644
--- a/website/content/docs/k8s/installation/install.mdx
+++ b/website/content/docs/k8s/installation/install.mdx
@@ -308,7 +308,7 @@ metadata:
spec:
containers:
- name: example
- image: 'consul:latest'
+ image: 'hashicorp/consul:latest'
env:
- name: HOST_IP
valueFrom:
@@ -345,7 +345,7 @@ spec:
spec:
containers:
- name: example
- image: 'consul:latest'
+ image: 'hashicorp/consul:latest'
env:
- name: HOST_IP
valueFrom:
diff --git a/website/data/docs-nav-data.json b/website/data/docs-nav-data.json
index 12ec94295fdd..a0f18358bc70 100644
--- a/website/data/docs-nav-data.json
+++ b/website/data/docs-nav-data.json
@@ -1209,6 +1209,10 @@
"title": "Overview",
"path": "enterprise/license/overview"
},
+ {
+ "title": "Automated License Utilization Reporting",
+ "path": "enterprise/license/utilization-reporting"
+ },
{
"title": "FAQ",
"path": "enterprise/license/faq"
@@ -1247,8 +1251,8 @@
"path": "api-gateway/usage/usage"
},
{
- "title": "Reroute HTTP Requests",
- "path": "api-gateway/usage/reroute-http-requests"
+ "title": "Reroute HTTP Requests",
+ "path": "api-gateway/usage/reroute-http-requests"
},
{
"title": "Route Traffic to Peered Services",
@@ -1257,8 +1261,7 @@
{
"title": "Error Messages",
"path": "api-gateway/usage/errors"
- }
-
+ }
]
},
{