---
layout: docs
page_title: Install API Gateway for Kubernetes
description: >-
  Learn how to install custom resource definitions (CRDs) and configure the Helm chart so that you can run Consul API Gateway on your Kubernetes deployment.
---

# Install API gateway for Kubernetes

The Consul API gateway ships with Consul and is automatically installed when you install Consul on Kubernetes. Before you begin the installation process, verify that the environment you are deploying Consul and the API gateway in meets the requirements listed in the [Technical Specifications](/consul/docs/connect/gateways/api-gateway/tech-specs). Refer to the [Release Notes](/consul/docs/release-notes) for any additional information about the version you are deploying.

1. The Consul Helm chart deploys the API gateway using the configuration specified in the `values.yaml` file. Refer to [Helm Chart Configuration - `connectInject.apiGateway`](/consul/docs/k8s/helm#apigateway) for information about the Helm chart configuration options. Create a `values.yaml` file for configuring your Consul API gateway deployment and include the following settings:

  <Tabs>

    <Tab heading="Reference configuration">
    <CodeBlockConfig filename="values.yaml">

    ```yaml
    global:
      name: consul
    connectInject:
      enabled: true
      apiGateway:
        manageExternalCRDs: true
    ```

    </CodeBlockConfig>
    </Tab>

    <Tab heading="OpenShift">

    If you are installing Consul on an OpenShift Kubernetes cluster, you must include the `global.openShift.enabled` parameter and set it to `true`. Refer to [OpenShift requirements](/consul/docs/connect/gateways/api-gateway/tech-specs#openshift-requirements) for additional information.

    <CodeBlockConfig filename="values.yaml">

     ```yaml
     global:
       openshift:
         enabled: true
     connectInject:
       enabled: true
       apiGateway:
         manageExternalCRDs: true
       cni:
         enabled: true
         logLevel: info
         multus: true
         cniBinDir: "/var/lib/cni/bin"
         cniNetDir: "/etc/kubernetes/cni/net.d"
     ```
    </CodeBlockConfig>
    </Tab>

    <Tab heading="GKE Autopilot">

    By default, GKE Autopilot installs [Gateway API resources](https://gateway-api.sigs.k8s.io), so we recommend customizing the `connectInject.apiGateway` stanza to accommodate the pre-installed Gateway API CRDs.

    The following working example enables both Consul Service Mesh and Consul API Gateway on GKE Autopilot. Refer to [`connectInject.agiGateway` in the Helm chart reference](https://developer.hashicorp.com/consul/docs/k8s/helm#v-connectinject-apigateway) for additional information.

    <CodeBlockConfig filename="values.yaml">

     ```yaml
     global:
       name: consul
     connectInject:
       enabled: true
       apiGateway:
         manageExternalCRDs: false
         manageNonStandardCRDs: true
       cni:
         enabled: true
         logLevel: info
         cniBinDir: "/home/kubernetes/bin"
         cniNetDir: "/etc/cni/net.d"
     ```
    </CodeBlockConfig>
    </Tab>

  </Tabs>

1. Install Consul API Gateway using the standard Consul Helm chart or Consul K8s CLI specify the custom values file. Refer to the [Consul Helm chart](https://github.com/hashicorp/consul-k8s/releases) in GitHub releases for the available versions.

  <Tabs>
  <Tab heading="Consul K8s CLI (Mac Only)">
  
  Refer to the official [Consul K8S CLI documentation](/consul/docs/k8s/k8s-cli) to find additional settings.
  
  ```shell-session
  $ brew tap hashicorp/tap
  ```
  
  ```shell-session
  $ brew install hashicorp/tap/consul-k8s
  ```
  
  ```shell-session
  $ consul-k8s install -config-file=values.yaml -set global.image=hashicorp/consul:1.17.0
  ```
  
  </Tab>
  <Tab heading="Helm">
  
  Add the HashiCorp Helm repository.
  
  ```shell-session
  $ helm repo add hashicorp https://helm.releases.hashicorp.com
  ```
  
  Install Consul with API Gateway on your Kubernetes cluster by specifying the `values.yaml` file.
  
  ```shell-session
  $ helm install consul hashicorp/consul --version 1.3.0 --values values.yaml --create-namespace --namespace consul
  ```
  
  </Tab>
  </Tabs>

<!--
****** KEEP ALL PAGE CONTENT ABOVE THIS LINE *******
Only Reference style links should be added below this comment
--->

[tech-specs]: /consul/docs/api-gateway/tech-specs
[rel-notes]: /consul/docs/release-notes
