Skip to content

Commit

Permalink
Update docs for the release of Consul API Gateway v0.5 (#15015)
Browse files Browse the repository at this point in the history
* added usage folder to organize use case docs for CAPIgw

* Add peer field to MeshService configuration page

* Add first pass at guide for routing to peered services

* Add exception to same-datacenter restriction for referenced Consul service

* Add example HTTPRoute referencing the MeshService as backendRef

* Add example ServiceResolver

* Add note about current ServiceResolver requirement

ServiceResolver may eventually be created implicitly by the API gateway controller, but that decision is pending.

* tweaks to the usage page for routing to peered services

* tweaks to the  description in the  configuration reference

* resolved TO-DOs from previous iteration

* Remove datacenter federation from limited support matrix

* added tolerations doc

* Remove note excluding k8s 1.24 since we now support it

* Reorder sections to maintain alphabetical sort

* Add example configuration for MeshService resource

* Adjust wording + indentation of other docs

* Use consistent "example-" prefix for resource names in example code

* reframed the tolerations documentation; STILL A WIP

* add helm chart documentation

* removed tolerations from gwcconfig configuration model reference

* Apply suggestions from code review

Co-authored-by: Jeff Boruszak <104028618+boruszak@users.noreply.github.com>

* Apply suggestions from code review

Co-authored-by: Jeff Boruszak <104028618+boruszak@users.noreply.github.com>

* update version to 0.5.0

* Update install.mdx

* added release notes for v.0.5.x

Co-authored-by: Nathan Coleman <nathan.coleman@hashicorp.com>
Co-authored-by: Sarah Alsmiller <sarah.alsmiller@hashicorp.com>
Co-authored-by: Jeff Boruszak <104028618+boruszak@users.noreply.github.com>
Co-authored-by: sarahalsmiller <100602640+sarahalsmiller@users.noreply.github.com>

manual cherry-pick because backport to stable website failed
  • Loading branch information
trujillo-adam committed Nov 18, 2022
1 parent 9f7ed93 commit 02d192e
Show file tree
Hide file tree
Showing 12 changed files with 350 additions and 136 deletions.
26 changes: 13 additions & 13 deletions website/content/docs/api-gateway/configuration/gatewayclass.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -58,22 +58,22 @@ Specifies a human-readable description of the gateway class. We recommend using
* Required: optional

## Example Configuration
The following example creates a gateway class called `test-gateway-class`:
The following example creates a gateway class called `example-gateway-class`:

<CodeBlockConfig filename="gateway.yaml">

```yaml
apiVersion: gateway.networking.k8s.io/v1alpha2
kind: GatewayClass
metadata:
name: test-gateway-class
spec:
controllerName: 'hashicorp.com/consul-api-gateway-controller'
parametersRef:
group: api-gateway.consul.hashicorp.com
kind: GatewayClassConfig
name: test-gateway-class-config
description: The gateway class is for creating test gateways class configurations
```yaml
apiVersion: gateway.networking.k8s.io/v1alpha2
kind: GatewayClass
metadata:
name: example-gateway-class
spec:
controllerName: 'hashicorp.com/consul-api-gateway-controller'
parametersRef:
group: api-gateway.consul.hashicorp.com
kind: GatewayClassConfig
name: example-gateway-class-config
description: The gateway class is for creating test gateways class configurations
```
</CodeBlockConfig>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -178,15 +178,15 @@ If set to `true`, then the Envoy container ports are mapped to host ports.


## Example Configuration
The following example creates a gateway class configuration called `test-gateway-class-config`. Traffic that passes through gateways created from the class configuration authenticate with Consul over HTTPS on port `8501`. Consul client agents communicate with server agents on port `8502` :
The following example creates a gateway class configuration called `example-gateway-class-config`. Traffic that passes through gateways created from the class configuration authenticates with Consul over HTTPS on port `8501`. Consul client agents communicate with server agents on port `8502`:

<CodeBlockConfig filename="gateway.yaml">

```yaml
apiVersion: api-gateway.consul.hashicorp.com/v1alpha1
kind: GatewayClassConfig
metadata:
name: test-gateway-class-config
name: example-gateway-class-config
spec:
useHostPorts: true
logLevel: 'trace'
Expand Down
35 changes: 31 additions & 4 deletions website/content/docs/api-gateway/configuration/meshservice.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,17 @@ This topic provides full details about the `MeshService` resource.

## Introduction

A `MeshService` is a resource in the Kubernetes cluster that enables Kubernetes configuration models, such as `HTTPRoute` and `TCPRoute`, to reference services that only exist in Consul. A `MeshService` represents a service in the Consul service mesh outside the Kubernetes cluster where Consul API Gateway is deployed. The service represented by the `MeshService` resource must be in the same Consul datacenter as the Kubernetes cluster.
A `MeshService` is a resource in the Kubernetes cluster that enables Kubernetes configuration models, such as `HTTPRoute` and `TCPRoute`, to reference services that only exist in Consul.
A `MeshService` represents a service in the Consul service mesh outside the Kubernetes cluster where Consul API Gateway is deployed.
The service represented by the `MeshService` resource must either be in the same Consul datacenter as the Kubernetes cluster or imported from a peered Consul cluster.


## Configuration Model

The following outline shows how to format the configurations in the `MeshService` object. Click on a property name to view details about the configuration.

* [`name`](#name): string | required
- [`name`](#name): string | required
- [`peer`](#peer): string | optional


## Specification
Expand All @@ -27,5 +30,29 @@ This topic provides details about the configuration parameters.

### name
Specifies the name of the service in the Consul service mesh to send traffic to.
* Type: string
* Required: required
- Type: string
- Required: required

### peer
Specifies the name of the peered Consul cluster that exported the service. If not specified, Consul defaults to the local datacenter.

You must apply a [`ServiceResolver`](/docs/connect/config-entries/service-resolver) for the referenced service. The `ServiceResolver` configuration entry enables Consul to resolve routes to upstream service instances.

- Type: string
- Required: optional

## Example Configuration

The following example creates a mesh service called `example-mesh-service`. Routes that use `example-mesh-service` as a backend route traffic to the Consul service in the local datacenter named `echo`.

<CodeBlockConfig filename="meshservice.yaml">

```yaml hideClipboard
apiVersion: api-gateway.consul.hashicorp.com/v1alpha1
kind: MeshService
metadata:
name: example-mesh-service
spec:
name: echo
```
</CodeBlockConfig>
4 changes: 2 additions & 2 deletions website/content/docs/api-gateway/install.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ Ensure that the environment you are deploying Consul API Gateway in meets the re
1. Set the version of Consul API Gateway you are installing as an environment variable. The following steps use this environment variable in commands and configurations.

```shell-session
$ export VERSION=0.3.0
$ export VERSION=0.5.0
```

1. Issue the following command to install the CRDs:
Expand Down Expand Up @@ -76,7 +76,7 @@ Ensure that the environment you are deploying Consul API Gateway in meets the re
Install Consul with API Gateway on your Kubernetes cluster by specifying the `values.yaml` file.
```shell-session
$ helm install consul hashicorp/consul --version 0.45.0 --values values.yaml --create-namespace --namespace consul
$ helm install consul hashicorp/consul --version 1.0.0 --values values.yaml --create-namespace --namespace consul
```
</Tab>
</Tabs>
Expand Down
6 changes: 2 additions & 4 deletions website/content/docs/api-gateway/tech-specs.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ Verify that your environment meets the following requirements prior to using Con
Your datacenter must meet the following requirements prior to configuring the Consul API Gateway:

- Kubernetes 1.21+
- Kubernetes 1.24 is not supported at this time.
- `kubectl` 1.21+
- Consul 1.11.2+
- HashiCorp Consul Helm chart 0.47.1+
Expand Down Expand Up @@ -48,9 +47,8 @@ The following table lists API Gateway limitations related to specific Consul fea

| Consul Feature | Limitation |
| -------------- | ---------- |
| [Admin partitions](/docs/enterprise/admin-partitions) | You can only deploy Consul API Gateway into the `default` admin partition and it can only route to other services within that partition, i.e. you cannot route to services in other admin partitions. |
| Datacenter federation | If you are connecting multiple Consul datacenters to create a federated network, you can only deploy Consul API Gateway in the `primary` datacenter. |
| Routing between datacenters | If you are connecting multiple Consul datacenters to create a federated network, API Gateway can only route traffic to Services in the local datacenter. However, API Gateway can route to Services in other Kubernetes clusters when they are in the same Consul datacenter. Refer to [Single Consul Datacenter in Multiple Kubernetes Clusters](/docs/k8s/deployment-configurations/single-dc-multi-k8s) for more details. |
| [Admin partitions](/docs/enterprise/admin-partitions) | You can deploy Consul API Gateway into the `default` admin partition only. You can route to services in other `default` admin partitions through peered connections. Refer to [Route Traffic to Peered Services](/consul/docs/api-gateway/usage/route-to-peered-services) for additional information. |
| Routing between datacenters | If you are connecting multiple Consul datacenters to create a federated network, you can route to services in other datacenters through peered connections. Refer to [Route Traffic to Peered Services](/consul/docs/api-gateway/usage/route-to-peered-services) for additional information. |

## Deployment Environments

Expand Down
60 changes: 60 additions & 0 deletions website/content/docs/api-gateway/usage/errors.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
---
layout: docs
page_title: Consul API Gateway Error Messages
description: >-
Learn how to apply a configured Consul API Gateway to your Kubernetes cluster, review the required fields for rerouting HTTP requests, and troubleshoot an error message.
---

# Error Messages

This topic provides information about potential error messages associated with Consul API Gateway. If you receive an error message that does not appear in this section, refer to the following resources:

- [Common Consul errors](/docs/troubleshoot/common-errors#common-errors-on-kubernetes)
- [Consul troubleshooting guide](/docs/troubleshoot/common-errors)
- [Consul Discuss forum](https://discuss.hashicorp.com/)

<!---
***************************************************************************
Use markdown's Reference-Style links when including hyperlinks. This makes it easier to read the content im markdown.

Each common error should have its own section on this page. Each section
should start with a heading line that is a short description of the error or
the text of the error.

Two examples:
### Failed opening file during installation
### Message: "Can't connect to repository" when running Helm chart

******** Template for new Error Messages ********
Copy and paste the following 13 lines when adding a new error message to this page.

### Title for this error

```
Replace with text of example error message
```
**Conditions:**
REPLACE THIS with description of when and why the error is typically seen

**Impact:**
REPLACE THIS with description of most likely impact of the event that caused this error to occur

**Resolution:**
REPLACE THIS with the actions the user should take to try to correct the situation

***************************************************************************
--->

## Helm installation failed: "no matches for kind"

```log
Error: INSTALLATION FAILED: unable to build kubernetes objects from release manifest: [unable to recognize "": no matches for kind "GatewayClass" in version "gateway.networking.k8s.io/v1alpha2", unable to recognize "": no matches for kind "GatewayClassConfig" in version "api-gateway.consul.hashicorp.com/v1alpha1"]
```
**Conditions:**
Consul API Gateway generates this error when the required CRD files have not been installed in Kubernetes prior to installing Consul API Gateway.

**Impact:**
The installation process typically fails after this error message is generated.

**Resolution:**
Install the required CRDs. Refer to the [Consul API Gateway installation instructions](/docs/api-gateway/install#installation) for instructions.
58 changes: 58 additions & 0 deletions website/content/docs/api-gateway/usage/reroute-http-requests.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
---
layout: docs
page_title: Reroute HTTP Requests
description: >-
Learn how to configure Consul API Gateway to reroute HTTP requests to a specific path.
---

# Reroute HTTP Requests

This topic describes how to configure Consul API Gateway to reroute HTTP requests.

## Requirements

1. Verify that the [requirements](/docs/api-gateway/tech-specs) have been met.
1. Verify that the Consul API Gateway CRDs and controller have been installed and applied. Refer to [Installation](/docs/api-gateway/install) for details.

## Configuration

Specify the following fields in your `Route` configuration. Refer to the [Route configuration reference](/docs/api-gateway/configuration/routes) for details about the parameters.

- [`rules.filters.type`](/docs/api-gateway/configuration/routes#rules-filters-type): Set this parameter to `URLRewrite` to instruct Consul API Gateway to rewrite the URL when specific conditions are met.
- [`rules.filters.urlRewrite`](/docs/api-gateway/configuration/routes#rules-filters-urlrewrite): Specify the `path` configuration.
- [`rules.filters.urlRewrite.path`](/docs/api-gateway/configuration/routes#rules-filters-urlrewrite-path): Contains the paths that incoming requests should be rewritten to based on the match conditions.

To configure the route to accept paths with or without a trailing slash, you must make two separate routes to handle each case.

### Example

In the following example, requests to` /incoming-request-prefix/` are forwarded to the `backendRef` as `/prefix-backend-receives/`. As a result, requests to `/incoming-request-prefix/request-path` are received by `backendRef` as `/prefix-backend-receives/request-path`.

<CodeBlockConfig filename="route.yaml">

```yaml hideClipboard
apiVersion: gateway.networking.k8s.io/v1beta1
kind: HTTPRoute
metadata:
name: example-route
##...
spec:
parentRefs:
- group: gateway.networking.k8s.io
kind: Gateway
name: api-gateway
rules:
- backendRefs:
. . .
filters:
- type: URLRewrite
urlRewrite:
path:
replacePrefixMatch: /prefix-backend-receives/
type: ReplacePrefixMatch
matches:
- path:
type: PathPrefix
value: /incoming–request-prefix/
```
</CodeBlockConfig>
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
---
page_title: Route Traffic to Peered Services
description: Learn how to configure Consul API Gateway to route traffic to services connected to the mesh through a peering connection.
---

# Route Traffic to Peered Services

This topic describes how to configure Consul API Gateway to route traffic to services connected to the mesh through a cluster peering connection.

## Requirements

1. Consul 1.14 or later
1. Verify that the [requirements](/docs/api-gateway/tech-specs) have been met.
1. Verify that the Consul API Gateway CRDs and controller have been installed and applied. Refer to [Installation](/docs/api-gateway/install) for details.
1. A peering connection must already be established between Consul clusters. Refer to [Cluster Peering on Kubernetes](/docs/connect/cluster-peering/k8s) for instructions.
1. The Consul service that you want to route traffic to must be exported to the cluster containing your `Gateway`. Refer to [Cluster Peering on Kubernetes](/docs/connect/cluster-peering/k8s) for instructions.
1. A `ServiceResolver` for the Consul service you want to route traffic to must be created in the cluster that contains your `Gateway`. Refer to [Service Resolver Configuration Entry](/docs/connect/config-entries/service-resolver) for instructions.

## Configuration

Specify the following fields in your `MeshService` configuration to use this feature. Refer to the [MeshService configuration reference](/docs/api-gateway/configuration/mesh) for details about the parameters.

- [`name`](/docs/api-gateway/configuration/meshservice#name)
- [`peer`](/docs/api-gateway/configuration/meshservice#peer)

## Example

In the following example, routes that use `example-mesh-service` as a backend are configured to send requests to the `echo` service exported by the peered Consul cluster `cluster-02`.

<CodeBlockConfig filename="serviceresolver.yaml">

```yaml hideClipboard
apiVersion: consul.hashicorp.com/v1alpha1
kind: ServiceResolver
metadata:
name: echo
spec:
redirect:
peer: cluster-02
service: echo
```
</CodeBlockConfig>
<CodeBlockConfig filename="meshservice.yaml">
```yaml hideClipboard
apiVersion: api-gateway.consul.hashicorp.com/v1alpha1
kind: MeshService
metadata:
name: example-mesh-service
spec:
name: echo
peer: cluster-02
```
</CodeBlockConfig>
After applying the `meshservice.yaml` configuration, an `HTTPRoute` may then reference `example-mesh-service` as its `backendRef`.

<CodeBlockConfig filename="route.yaml">

```yaml hideClipboard
apiVersion: gateway.networking.k8s.io/v1beta1
kind: HTTPRoute
metadata:
name: example-route
spec:
...
rules:
- backendRefs:
- group: api-gateway.consul.hashicorp.com
kind: MeshService
name: example-mesh-service
port: 3000
...
```
</CodeBlockConfig>
Loading

0 comments on commit 02d192e

Please sign in to comment.