Create an Upstream and Target

Uses: Kong Gateway Operator
Related Documentation
Incompatible with
on-prem
TL;DR

Define a KongUpstream and associate one or more KongTarget resources with it to distribute traffic across backend services.

Prerequisites

If you don’t have a Konnect account, you can get started quickly with our onboarding wizard.

  1. The following Konnect items are required to complete this tutorial:
    • Personal access token (PAT): Create a new personal access token by opening the Konnect PAT page and selecting Generate Token.
  2. Set the personal access token as an environment variable:

    export KONNECT_TOKEN='YOUR KONNECT TOKEN'
    
    Copied to clipboard!

Create a KongUpstream

Use the KongUpstream resource to define a load balancing group for backend services. Your KongUpstream must be associated with a KonnectGatewayControlPlane object that you’ve created in your cluster.

echo '
kind: KongUpstream
apiVersion: configuration.konghq.com/v1alpha1
metadata:
  name: upstream
  namespace: kong
spec:
  name: upstream
  controlPlaneRef:
    type: konnectNamespacedRef
    konnectNamespacedRef:
      name: gateway-control-plane
' | kubectl apply -f -
Copied to clipboard!

Create KongTargets

Use the KongTarget resource to register two individual backend Targets for the Upstream.

First, create target-a:

echo '
kind: KongTarget
apiVersion: configuration.konghq.com/v1alpha1
metadata:
  name: target-a
  namespace: kong
spec:
  upstreamRef:
    name: upstream
  target: 10.0.0.1
  weight: 30
' | kubectl apply -f -
Copied to clipboard!

Next, target-b:

echo '
kind: KongTarget
apiVersion: configuration.konghq.com/v1alpha1
metadata:
  name: target-b
  namespace: kong
spec:
  upstreamRef:
    name: upstream
  target: 10.0.0.2
  weight: 70
' | kubectl apply -f -
Copied to clipboard!

Validation

Check that Programmed is True on the upstream resource:

You can verify the KongUpstream was reconciled successfully by checking its Programmed condition.

kubectl get -n kong kongupstream upstream \
  -o=jsonpath='{.status.conditions[?(@.type=="Programmed")]}' | jq
Copied to clipboard!

The output should look similar to this:

{
  "observedGeneration": 1,
  "reason": "Programmed",
  "status": "True",
  "type": "Programmed"
}
Copied to clipboard!

Check that Programmed is True on the target-a resource:

You can verify the KongTarget was reconciled successfully by checking its Programmed condition.

kubectl get -n kong kongtarget target-a \
  -o=jsonpath='{.status.conditions[?(@.type=="Programmed")]}' | jq
Copied to clipboard!

The output should look similar to this:

{
  "observedGeneration": 1,
  "reason": "Programmed",
  "status": "True",
  "type": "Programmed"
}
Copied to clipboard!

Check that Programmed is True on the target-b resource:

You can verify the KongTarget was reconciled successfully by checking its Programmed condition.

kubectl get -n kong kongtarget target-b \
  -o=jsonpath='{.status.conditions[?(@.type=="Programmed")]}' | jq
Copied to clipboard!

The output should look similar to this:

{
  "observedGeneration": 1,
  "reason": "Programmed",
  "status": "True",
  "type": "Programmed"
}
Copied to clipboard!

Did this doc help?

Something wrong?

Help us make these docs great!

Kong Developer docs are open source. If you find these useful and want to make them better, contribute today!