Configuring the Container Gateway
This section contains the core instructions and concepts for configuring the Container Gateway. For the reference implementation, Layer7 assumes that you are deploying a Gateway solution to a Kubernetes environment with an external MySQL database.
The Helm Chart(s) and suggested configurations referenced on this page and other Layer7 API Gateway documentation (including those found in GitHub) are configurable via a values.yaml file. The samples provided in the Layer7 repository can be used as a starting point to configure your installation for a production scenario.
About Helm Charts
In prior releases of the Container Gateway, Kubernetes deployments were configured through Kubernetes-native yaml files that specified objects such as service, configmaps, secrets, and the MySQL database. Writing and maintaining these yaml files can be laborious - especially if you have to deal with multiple Gateways and Gateway environments. Starting with Gateway version 10.0 CR2, Layer7's primary recommendation for installing, configuring, and deploying is the Helm Chart.
Container Gateway Helm charts are currently stored and updated in Layer7 Broadcom's CAAPIM GitHub repository. For the latest reference information and installation/configuration instructions, refer to the README.md file.
Why Helm Charts?
Helm Charts are essentially 'packaged applications' that describe how the Container Gateway solution shall be built in a Kubernetes cluster. Main benefits include:
- Launching independent components of the Gateway solution will be simplified and less error-prone from human intervention. Each release will be responsible for a particular sequence of configurations - all that is required is that you execute the corresponding Helm Chart.
- Charts can be integrated into CI/CD workflows for a Gateway solution lifecycle that require interactions with other third-party applications (such as the Developer Plugin, Jenkins, GitHub, etc.) repeatable and predictable.
- Easy to scale from standard to high availability number of Gateways to support changing business needs and/or site traffic.
Anatomy of a Container Gateway Helm Chart
The GitHub repository structure of the Layer7 Container Gateway Helm Chart follows the basic structure of most Helm Chart repositories. The entire repository makes up 'the chart', containing all the working components as described in the following table.
File or Folder
This folder contains other 'subcharts' that your main chart (Chart.yml) may call or depend on.
This folder contains the actual manifest that are deployed with the chart. When Helm evaluates a chart, it will send all of the templates (a mix of yaml and tpl files) in the
templates/directory through the template rendering engine. It then collects the results of those templates and sends them to Kubernetes.
Holds all the artifacts to ignore when packaging the chart.
Contains the identifying information about the chart that is being packaged (e.g., apiVersion, name, KubeVersion, description, etc.)
Defines the values you want to 'inject' into the templates. This removes the need to hard-code configurations in the template files, allowing configurations to be parameterized, easily repeatable and managed from a single source.
About the Helm Values File
Helm Charts permit the 'templatization' of Gateway configurations so that configurations do not need to be hard-coded into individual YAML files and then version controlled for different environments or operating scenarios. Rather, each template is expressed in functions and the values defined in a single values.yaml file are then injected into their respective template files prior to Kubernetes deployment.
The following diagram illustrates how the values.yaml file maps to the respective template files, and the resulting Container Gateway deployment in a Kubernetes cluster. Note that the parameter names or values shown do not reflect an actual Gateway configuration are intended for illustrative purposes only.
Check out the sample values.yaml file in the Layer7 GitHub repo to learn what parameters are currently available for configuration.