Create an Upstream and Target
Define a KongUpstream
and associate one or more KongTarget
resources with it to distribute traffic across backend services.
Prerequisites
Kong Konnect
If you don’t have a Konnect account, you can get started quickly with our onboarding wizard.
- 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.
-
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 -
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 -
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 -
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
The output should look similar to this:
{
"observedGeneration": 1,
"reason": "Programmed",
"status": "True",
"type": "Programmed"
}
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
The output should look similar to this:
{
"observedGeneration": 1,
"reason": "Programmed",
"status": "True",
"type": "Programmed"
}
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
The output should look similar to this:
{
"observedGeneration": 1,
"reason": "Programmed",
"status": "True",
"type": "Programmed"
}