• HashiCorp Developer

  • HashiCorp Cloud Platform
  • Terraform
  • Packer
  • Consul
  • Vault
  • Boundary
  • Nomad
  • Waypoint
  • Vagrant
Consul
  • Install
  • Tutorials
  • Documentation
  • API
  • CLI
  • Try Cloud(opens in new tab)
  • Sign up
Consul Home

Documentation

Skip to main content
  • Documentation
  • What is Consul?



    • Overview
    • Architecture
    • Service Sync
    • Annotations and Labels
    • Consul DNS
    • Compatibility Matrix
    • Helm Chart Configuration
    • Consul K8s CLI Reference

  • HCP Consul


  • Resources

  • Tutorial Library
  • Certifications
  • Community Forum
    (opens in new tab)
  • Support
    (opens in new tab)
  • GitHub
    (opens in new tab)
  1. Developer
  2. Consul
  3. Documentation
  4. Kubernetes
  5. Consul K8s CLI Reference
  • Consul
  • v1.13.x
  • v1.12.x
  • v1.11.x
  • v1.10.x
  • v1.9.x
  • v1.8.x

»Consul on Kubernetes CLI Reference

The Consul on Kubernetes CLI, consul-k8s, is a tool for managing Consul that does not require direct interaction with Helm, the Consul CLI, or kubectl.

For guidance on how to install consul-k8s, refer to the Installing the Consul K8s CLI documentation.

This topic describes the commands and available options for using consul-k8s.

Usage

The Consul on Kubernetes CLI uses the following syntax:

$ consul-k8s <COMMAND> <OPTIONS>

Commands

You can use the following commands with consul-k8s.

  • install: Install Consul on Kubernetes.
  • proxy: Inspect Envoy proxies managed by Consul.
    • proxy list: List all Pods running proxies managed by Consul.
    • proxy read: Inspect the Envoy configuration for a given Pod.
  • status: Check the status of a Consul installation on Kubernetes.
  • uninstall: Uninstall Consul deployment.
  • upgrade: Upgrade Consul on Kubernetes from an existing installation.
  • version: Print the version of the Consul on Kubernetes CLI.

install

The install command installs Consul on your Kubernetes cluster.

$ consul-k8s install <OPTIONS>

The following options are available.

FlagDescriptionDefault
-auto-approveBoolean value that enables you to skip the installation confirmation prompt.false
-dry-runBoolean value that validates the installation and returns a summary.false
-config-fileString value that specifies the path to a file containing custom installation configurations, e.g., Consul Helm chart values file.
You can use the -config-file flag multiple times to specify multiple files.
none
-namespaceString value that specifies the namespace of the Consul installation.consul
-presetString value that installs Consul based on a preset configuration. You can specify the following values:
demo: Installs a single replica server with sidecar injection enabled; useful for testing service mesh functionality.
secure: Installs a single replica server with sidecar injection, ACLs, and TLS enabled; useful for testing service mesh functionality.
Configuration of the Consul Helm chart.
-setString value that enables you to set a customizable value. This flag is comparable to the helm install --set flag.
You can use the -set flag multiple times to set multiple values.
Consul Helm chart values are supported.
none
-set-fileString value that specifies the name of an arbitrary config file. This flag is comparable to the helm install --set-file
flag. The contents of the file will be used to set a customizable value. You can use the -set-file flag multiple times to specify multiple files.
Consul Helm chart values are supported.
none
-set-stringString value that enables you to set a customizable string value. This flag is comparable to the helm install --set-string
flag. You can use the -set-string flag multiple times to specify multiple strings.
Consul Helm chart values are supported.
none
-timeoutSpecifies how long to wait for the installation process to complete before timing out. The value is specified with an integer and string value indicating a unit of time.
The following units are supported:
ms (milliseconds)
s (seconds)
m (minutes)
In the following example, installation will timeout after one minute:
consul-k8s install -timeout 1m
10m
-waitBoolean value that determines if Consul should wait for resources in the installation to be ready before exiting the command.true
-verbose, -vBoolean value that specifies whether to output verbose logs from the install command with the status of resources being installed.false
-help, -hPrints usage information for this option.none

See Global Options for additional commands that you can use when installing Consul on Kubernetes.

Example Commands

The following example command installs Consul in the myNS namespace according to the secure preset.

$ consul-k8s install -preset=secure -namespace=myNS

The following example commands install Consul on Kubernetes using custom values, files, or strings that are set via flags. The underlying Consul-on-Kubernetes Helm chart uses the flags to customize the installation. The flags are comparable to the helm install flags.

$ consul-k8s install -set key=value
$ consul-k8s install -set key1=value1 -set key2=value2
$ consul-k8s install -set-file config1=value1.conf
$ consul-k8s install -set-file config1=value1.conf -set-file config2=value2.conf
$ consul-k8s install -set-string key=value-bool

proxy

The proxy command exposes two subcommands for interacting with proxies managed by Consul in your Kubernetes Cluster.

  • proxy list: List all Pods running proxies managed by Consul.
  • proxy read: Inspect the Envoy configuration for a given Pod.

proxy list

$ consul-k8s proxy list <OPTIONS>
FlagDescriptionDefault
-all-namespaces, -ABoolean List pods in all Kubernetes namespaces.false
-namespace, -nString The Kubernetes namespace to list proxies in.Current kubeconfig namespace.

Refer to the Global Options for additional options that you can use when installing Consul on Kubernetes.

This command lists proxies and their Type. Types of proxies include:

  • Sidecar: The majority of pods in the cluster are Sidecar types. They run the proxy as a sidecar to connect the pod as a service in the mesh.
  • API Gateway: These pods run a proxy to manage connections with networks outside of the Consul cluster. Read more about API gateways.
  • Ingress Gateway: These pods run a proxy to manage ingress into the Kubernetes cluster. Read more about ingress gateways.
  • Terminating Gateway: These pods run a proxy to control connections to external services. Read more about terminating gateways.
  • Mesh Gateway: These pods run a proxy to manage connections between Consul clusters connected using mesh federation. Read more about Consul Mesh Federation.

Example Commands

Display all pods in the current Kubernetes namespace that run proxies managed by Consul.

$ consul-k8s proxy list
Namespace: default

Name                        Type
backend-658b679b45-d5xlb    Sidecar
client-767ccfc8f9-6f6gx     Sidecar
client-767ccfc8f9-f8nsn     Sidecar
client-767ccfc8f9-ggrtx     Sidecar
frontend-676564547c-v2mfq   Sidecar

Display all pods in the consul Kubernetes namespace that run proxies managed by Consul.

$ consul-k8s proxy list -n consul
Namespace: consul

Name                                    Type
consul-ingress-gateway-6fb5544485-br6fl Ingress Gateway
consul-ingress-gateway-6fb5544485-m54sp Ingress Gateway

Display all Pods across all namespaces that run proxies managed by Consul.

$ consul-k8s proxy list -A
Namespace: All namespaces

Namespace   Name                                    Type
consul      consul-ingress-gateway-6fb5544485-br6fl Ingress Gateway
consul      consul-ingress-gateway-6fb5544485-m54sp Ingress Gateway
default     backend-658b679b45-d5xlb                Sidecar
default     client-767ccfc8f9-6f6gx                 Sidecar
default     client-767ccfc8f9-f8nsn                 Sidecar
default     client-767ccfc8f9-ggrtx                 Sidecar
default     frontend-676564547c-v2mfq               Sidecar

proxy read

The proxy read command allows you to inspect the configuration of Envoy proxies running on a given Pod.

$ consul-k8s proxy read <PODNAME> <OPTIONS>

The command takes a required value, <PODNAME>. This should be the full name of a Kubernetes Pod. If a Pod is running more than one Envoy proxy managed by Consul, as in the Multiport configuration, configuration for all proxies in the Pod will be displayed.

The following options are available.

FlagDescriptionDefault
-namespace, -nString The namespace where the target Pod can be found.Current kubeconfig namespace.
-output, -oString Output the Envoy configuration as 'table', 'json', or 'raw'.'table'
-clustersBoolean Filter output to only show clusters.false
-endpointsBoolean Filter output to only show endpoints.false
-listenersBoolean Filter output to only show listeners.false
-routesBoolean Filter output to only show routes.false
-secretsBoolean Filter output to only show secrets.false
-addressString Filter clusters, endpoints, and listeners output to only those with endpoint addresses which contain the given value.""
-fqdnString Filter cluster output to only clusters with a fully qualified domain name which contains the given value.""
-portInt Filter endpoints output to only endpoints with the given port number.-1 which does not filter by port

Example commands

Get the configuration summary for the Envoy proxy running on the Pod backend-658b679b45-d5xlb.

$ consul-k8s proxy read backend-658b679b45-d5xlb
Envoy configuration for backend-658b679b45-d5xlb in namespace default:

==> Clusters (5)
Name                    FQDN                                                                        Endpoints                                                           Type            Last Updated
local_agent             local_agent                                                                 192.168.79.187:8502                                                 STATIC          2022-05-13T04:22:39.553Z
client                  client.default.dc1.internal.bc3815c2-1a0f-f3ff-a2e9-20d791f08d00.consul     192.168.18.110:20000, 192.168.52.101:20000, 192.168.65.131:20000    EDS             2022-08-08T12:02:07.471Z
frontend                frontend.default.dc1.internal.bc3815c2-1a0f-f3ff-a2e9-20d791f08d00.consul   192.168.63.120:20000                                                EDS             2022-08-08T12:02:07.354Z
local_app               local_app                                                                   127.0.0.1:8080                                                      STATIC          2022-05-13T04:22:39.655Z
original-destination    original-destination                                                                                                                            ORIGINAL_DST    2022-05-13T04:22:39.743Z


==> Endpoints (6)
Address:Port            Cluster                                                                     Weight  Status
192.168.79.187:8502     local_agent                                                                 1.00    HEALTHY
192.168.18.110:20000    client.default.dc1.internal.bc3815c2-1a0f-f3ff-a2e9-20d791f08d00.consul     1.00    HEALTHY
192.168.52.101:20000    client.default.dc1.internal.bc3815c2-1a0f-f3ff-a2e9-20d791f08d00.consul     1.00    HEALTHY
192.168.65.131:20000    client.default.dc1.internal.bc3815c2-1a0f-f3ff-a2e9-20d791f08d00.consul     1.00    HEALTHY
192.168.63.120:20000    frontend.default.dc1.internal.bc3815c2-1a0f-f3ff-a2e9-20d791f08d00.consul   1.00    HEALTHY
127.0.0.1:8080          local_app                                                                   1.00    HEALTHY

==> Listeners (2)
Name                Address:Port            Direction   Filter Chain Match              Filters                                                                         Last Updated
public_listener     192.168.69.179:20000    INBOUND     Any                             * to local_app/                                                                 2022-08-08T12:02:22.261Z
outbound_listener   127.0.0.1:15001         OUTBOUND    10.100.134.173/32, 240.0.0.3/32 to client.default.dc1.internal.bc3815c2-1a0f-f3ff-a2e9-20d791f08d00.consul      2022-07-18T15:31:03.246Z
                                                        10.100.31.2/32, 240.0.0.5/32    to frontend.default.dc1.internal.bc3815c2-1a0f-f3ff-a2e9-20d791f08d00.consul
                                                        Any                             to original-destination

==> Routes (1)
Name            Destination Cluster Last Updated
public_listener local_app/          2022-08-08T12:02:22.260Z

==> Secrets (0)
Name    Type    Last Updated


Get the Envoy configuration summary for all clusters with a fully qualified domain name that includes "default". Display only clusters and listeners.

$ consul-k8s proxy read backend-658b679b45-d5xlb -fqdn default -clusters -listeners
==> Filters applied
    Fully qualified domain names containing: default

Envoy configuration for backend-658b679b45-d5xlb in namespace default:

==> Clusters (2)
Name        FQDN                                                                        Endpoints                                                           Type    Last Updated
client      client.default.dc1.internal.bc3815c2-1a0f-f3ff-a2e9-20d791f08d00.consul     192.168.18.110:20000, 192.168.52.101:20000, 192.168.65.131:20000    EDS     2022-08-08T12:02:07.471Z
frontend    frontend.default.dc1.internal.bc3815c2-1a0f-f3ff-a2e9-20d791f08d00.consul   192.168.63.120:20000                                                EDS     2022-08-08T12:02:07.354Z


==> Listeners (2)
Name                Address:Port            Direction   Filter Chain Match              Filters                                                                         Last Updated
public_listener     192.168.69.179:20000    INBOUND     Any                             * to local_app/                                                                 2022-08-08T12:02:22.261Z
outbound_listener   127.0.0.1:15001         OUTBOUND    10.100.134.173/32, 240.0.0.3/32 to client.default.dc1.internal.bc3815c2-1a0f-f3ff-a2e9-20d791f08d00.consul      2022-07-18T15:31:03.246Z
                                                        10.100.31.2/32, 240.0.0.5/32    to frontend.default.dc1.internal.bc3815c2-1a0f-f3ff-a2e9-20d791f08d00.consul
                                                        Any                             to original-destination

Get the Envoy configuration summary in a JSON format. Note that this is not the same as the raw configuration dump from the admin API. This information is the same as what is displayed in the table output above, but in a JSON format.

$ consul-k8s proxy read backend-658b679b45-d5xlb -o json
{
    "backend-658b679b45-d5xlb": {
        "clusters": [
            {
                "Name": "local_agent",
                "FullyQualifiedDomainName": "local_agent",
                "Endpoints": [
                    "192.168.79.187:8502"
                ],
                "Type": "STATIC",
                "LastUpdated": "2022-05-13T04:22:39.553Z"
            },
            {
                "Name": "client",
                "FullyQualifiedDomainName": "client.default.dc1.internal.bc3815c2-1a0f-f3ff-a2e9-20d791f08d00.consul",
                "Endpoints": [
                    "192.168.18.110:20000",
                    "192.168.52.101:20000",
                    "192.168.65.131:20000"
                ],
                "Type": "EDS",
                "LastUpdated": "2022-08-08T12:02:07.471Z"
            },
            {
                "Name": "frontend",
                "FullyQualifiedDomainName": "frontend.default.dc1.internal.bc3815c2-1a0f-f3ff-a2e9-20d791f08d00.consul",
                "Endpoints": [
                    "192.168.63.120:20000"
                ],
                "Type": "EDS",
                "LastUpdated": "2022-08-08T12:02:07.354Z"
            },
            {
                "Name": "local_app",
                "FullyQualifiedDomainName": "local_app",
                "Endpoints": [
                    "127.0.0.1:8080"
                ],
                "Type": "STATIC",
                "LastUpdated": "2022-05-13T04:22:39.655Z"
            },
            {
                "Name": "original-destination",
                "FullyQualifiedDomainName": "original-destination",
                "Endpoints": [],
                "Type": "ORIGINAL_DST",
                "LastUpdated": "2022-05-13T04:22:39.743Z"
            }
        ],
        "endpoints": [
            {
                "Address": "192.168.79.187:8502",
                "Cluster": "local_agent",
                "Weight": 1,
                "Status": "HEALTHY"
            },
            {
                "Address": "192.168.18.110:20000",
                "Cluster": "client.default.dc1.internal.bc3815c2-1a0f-f3ff-a2e9-20d791f08d00.consul",
                "Weight": 1,
                "Status": "HEALTHY"
            },
            {
                "Address": "192.168.52.101:20000",
                "Cluster": "client.default.dc1.internal.bc3815c2-1a0f-f3ff-a2e9-20d791f08d00.consul",
                "Weight": 1,
                "Status": "HEALTHY"
            },
            {
                "Address": "192.168.65.131:20000",
                "Cluster": "client.default.dc1.internal.bc3815c2-1a0f-f3ff-a2e9-20d791f08d00.consul",
                "Weight": 1,
                "Status": "HEALTHY"
            },
            {
                "Address": "192.168.63.120:20000",
                "Cluster": "frontend.default.dc1.internal.bc3815c2-1a0f-f3ff-a2e9-20d791f08d00.consul",
                "Weight": 1,
                "Status": "HEALTHY"
            },
            {
                "Address": "127.0.0.1:8080",
                "Cluster": "local_app",
                "Weight": 1,
                "Status": "HEALTHY"
            }
        ],
        "listeners": [
            {
                "Name": "public_listener",
                "Address": "192.168.69.179:20000",
                "FilterChain": [
                    {
                        "Filters": [
                            "* to local_app/"
                        ],
                        "FilterChainMatch": "Any"
                    }
                ],
                "Direction": "INBOUND",
                "LastUpdated": "2022-08-08T12:02:22.261Z"
            },
            {
                "Name": "outbound_listener",
                "Address": "127.0.0.1:15001",
                "FilterChain": [
                    {
                        "Filters": [
                            "to client.default.dc1.internal.bc3815c2-1a0f-f3ff-a2e9-20d791f08d00.consul"
                        ],
                        "FilterChainMatch": "10.100.134.173/32, 240.0.0.3/32"
                    },
                    {
                        "Filters": [
                            "to frontend.default.dc1.internal.bc3815c2-1a0f-f3ff-a2e9-20d791f08d00.consul"
                        ],
                        "FilterChainMatch": "10.100.31.2/32, 240.0.0.5/32"
                    },
                    {
                        "Filters": [
                            "to original-destination"
                        ],
                        "FilterChainMatch": "Any"
                    }
                ],
                "Direction": "OUTBOUND",
                "LastUpdated": "2022-07-18T15:31:03.246Z"
            }
        ],
        "routes": [
            {
                "Name": "public_listener",
                "DestinationCluster": "local_app/",
                "LastUpdated": "2022-08-08T12:02:22.260Z"
            }
        ],
        "secrets": []
    }
}

Get the raw Envoy configuration dump and clusters information for the Envoy proxy running on the Pod backend-658b679b45-d5xlb. The example command returns the raw configuration for each service as JSON. You can use the JQ command line tool to index into the configuration for the service you want to inspect.

Refer to the Envoy config dump documentation for more information on the structure of the config dump.

The following output is truncated for brevity.

$ consul-k8s proxy read backend-658b679b45-d5xlb -o raw
{
  "backend-658b679b45-d5xlb": {
    "clusters": {
      // [-- snip 372 lines --] output from the Envoy admin interface's /clusters endpoint.
    },
    "config_dump": {
      // [-- snip 1816 lines --] output from the Envoy admin interface's /config_dump?include_eds endpoint.
    }
}

status

The status command provides an overall status summary of the Consul on Kubernetes installation. It also provides the configuration that was used to deploy Consul K8s and information about the health of Consul servers and clients. This command does not take in any flags.

$ consul-k8s status

Example Command

$ consul-k8s status

==> Consul-K8s Status Summary
   NAME  | NAMESPACE |  STATUS  | CHARTVERSION | APPVERSION | REVISION |      LAST UPDATED
---------+-----------+----------+--------------+------------+----------+--------------------------
  consul | consul    | deployed | 0.41.1       | 1.11.4     |        1 | 2022/03/10 07:48:58 MST

==> Config:
    connectInject:
      enabled: true
      metrics:
        defaultEnableMerging: true
        defaultEnabled: true
        enableGatewayMetrics: true
    global:
      metrics:
        enableAgentMetrics: true
        enabled: true
      name: consul
    prometheus:
      enabled: true
    server:
      replicas: 1
    ui:
      enabled: true
      service:
        enabled: true

 ✓ Consul servers healthy (1/1)
 ✓ Consul clients healthy (3/3)

uninstall

The uninstall command removes Consul from Kubernetes.

$ consul-k8s uninstall <OPTIONS>

The following options are available.

FlagDescriptionDefault
-auto-approveBoolean value that enables you to skip the removal confirmation prompt.false
-nameString value for the name of the installation to remove.none
-namespaceString value that specifies the namespace of the Consul installation to remove.consul
-timeoutSpecifies how long to wait for the removal process to complete before timing out. The value is specified with an integer and string value indicating a unit of time.
The following units are supported:
ms (milliseconds)
s (seconds)
m (minutes)
h (hours)
In the following example, removal will timeout after one minute:
consul-k8s uninstall -timeout 1m
10m
-wipe-dataBoolean value that deletes PVCs and secrets associated with the Consul installation during installation.
Data will be removed without a verification prompt if the -auto-approve flag is set to true.
false
Instructions for removing data will be printed to the console.
--helpPrints usage information for this option.none

See Global Options for additional commands that you can use when uninstalling Consul from Kubernetes.

Example Command

The following example command immediately uninstalls Consul from the my-ns namespace with the name my-consul and removes PVCs and secrets associated with the installation without asking for verification:

$ consul-k8s uninstall -namespace=my-ns -name=my-consul -wipe-data=true -auto-approve=true

upgrade

The upgrade command upgrades the Consul on Kubernetes components to the current version of the consul-k8s cli. Prior to running consul-k8s upgrade, the consul-k8s CLI should first be upgraded to the latest version as described Upgrade the Consul K8s CLI

$ consul-k8s upgrade

The following options are available.

FlagDescriptionDefault
-auto-approveBoolean value that enables you to skip the upgrade confirmation prompt.false
-dry-runBoolean value that allows you to run pre-upgrade checks and returns a summary of the upgrade.false
-config-fileString value that specifies the path to a file containing custom upgrade configurations, e.g., Consul Helm chart values file.
You can use the -config-file flag multiple times to specify multiple files.
none
-namespaceString value that specifies the namespace of the Consul installation.consul
-presetString value that upgrades Consul based on a preset configuration.Configuration of the Consul Helm chart.
-setString value that enables you to set a customizable value. This flag is comparable to the helm upgrade --set flag.
You can use the -set flag multiple times to set multiple values.
Consul Helm chart values are supported.
none
-set-fileString value that specifies the name of an arbitrary config file. This flag is comparable to the helm upgrade --set-file
flag. The contents of the file will be used to set a customizable value. You can use the -set-file flag multiple times to specify multiple files.
Consul Helm chart values are supported.
none
-set-stringString value that enables you to set a customizable string value. This flag is comparable to the helm upgrade --set-string
flag. You can use the -set-string flag multiple times to specify multiple strings.
Consul Helm chart values are supported.
none
-timeoutSpecifies how long to wait for the upgrade process to complete before timing out. The value is specified with an integer and string value indicating a unit of time.
The following units are supported:
ms (milliseconds)
s (seconds)
m (minutes)
In the following example, the upgrade will timeout after one minute:
consul-k8s upgrade -timeout 1m
10m
-waitBoolean value that determines if Consul should wait for resources in the upgrade to be ready before exiting the command.true
-verbose, -vBoolean value that specifies whether to output verbose logs from the upgrade command with the status of resources being upgraded.false
--helpPrints usage information for this option.none

See Global Options for additional commands that you can use when installing Consul on Kubernetes.

version

The version command prints the Consul on Kubernetes version. This command does not take any options.

$ consul-k8s version

You can also print the version with the --version flag.

$ consul-k8s --version

Global Options

The following global options are available.

FlagDescriptionDefault
-contextString value that sets the Kubernetes context to use for Consul K8s CLI operations.none
-kubeconfig, -cString value that specifies the path to the kubeconfig file.
none
Edit this page on GitHub

On this page

  1. Consul on Kubernetes CLI Reference
  2. Usage
  3. Commands
  4. Global Options
Give Feedback(opens in new tab)
  • Certifications
  • System Status
  • Terms of Use
  • Security
  • Privacy
  • Trademark Policy
  • Trade Controls
  • Give Feedback(opens in new tab)