A zone control plane connects to a global control plane for policies configuration.
Because the global control plane and the zone control plane exchange sensitive information, the communication needs to be encrypted by TLS.
By default, the global control plane’s server that is consumed by the zone control plane is secured by TLS with autogenerated certificates.
It’s recommended that the zone control plane verifies the identity of the global control plane. To do so, zone control planes need to obtain the CA that was used to generate the certificate by which the control plane’s server is secured.
To override autogenerated certificates
1) Prepare certificates
Generate TLS pair with a PKI of your choice and store it in PEM-encoded format in /tmp/tls.crt
, /tmp/tls.key
.
Store the CA that was used to sign this pair in /tmp/ca.crt
You can also use kumactl
to generate self-signed certs:
kumactl generate tls-certificate \
--type=server \
--hostname=<CROSS_ZONE_KUMA_CP_DNS_NAME> \
--cert-file=/tmp/tls.crt \
--key-file=/tmp/tls.key
Since “tls.crt” is a self-signed cert, it’s also a CA:
cp /tmp/tls.crt /tmp/ca.crt
2) Configure global control plane
Create a secret in the namespace where the global control plane is installed:
kubectl create secret tls kds-server-tls -n kong-mesh-system \
--cert=/tmp/tls.crt \
--key=/tmp/tls.key
Point to this secret when installing the global control plane:
kumactl install control-plane \
--set "kuma.controlPlane.tls.kdsGlobalServer.secretName=kds-server-tls" \
| kubectl apply -f -
# Before installing Kong Mesh with Helm, configure your local Helm repository:
# https://developer.konghq.com/mesh/2.10/production/cp-deployment/kubernetes/#helm
helm install \
--create-namespace \
--namespace kong-mesh-system \
--set "kuma.controlPlane.tls.kdsGlobalServer.secretName=kds-server-tls" \
kong-mesh kong-mesh/kong-mesh
Point to the certificate and the key:
KUMA_MULTIZONE_GLOBAL_KDS_TLS_CERT_FILE=/tmp/tls.crt \
KUMA_MULTIZONE_GLOBAL_KDS_TLS_KEY_FILE=/tmp/tls.key \
KUMA_MODE=global \
kuma-cp run
3) Configure the zone control plane
Create a secret in the namespace where the zone control plane is installed:
kubectl create secret generic kds-ca-certs -n kong-mesh-system \
--from-file=ca.crt=/tmp/ca.crt
Point to this secret when installing the zone control plane:
kumactl install control-plane \
--set "kuma.controlPlane.tls.kdsZoneClient.secretName=kds-ca-certs" \
| kubectl apply -f -
# Before installing Kong Mesh with Helm, configure your local Helm repository:
# https://developer.konghq.com/mesh/2.10/production/cp-deployment/kubernetes/#helm
helm install \
--create-namespace \
--namespace kong-mesh-system \
--set "kuma.controlPlane.tls.kdsZoneClient.secretName=kds-ca-certs" \
kong-mesh kong-mesh/kong-mesh
Point to the certificate and the key:
KUMA_MULTIZONE_ZONE_KDS_ROOT_CA_FILE=/tmp/ca.crt \
KUMA_MODE=zone \
KUMA_MULTIZONE_ZONE_GLOBAL_ADDRESS=grpcs://<CROSS_ZONE_KUMA_CP_DNS_NAME>:5685 \
kuma-cp run
Define firewall rules on the global control plane to only accept connections from known IPs of the zone control planes.
Third-party extensions, cloud implementations or commercial offerings may be extending the authentication support.