Skip to content

Commit 157feba

Browse files
authored
fix: fix setting DataPlane readiness probe using GatewayConfiguration (#1118)
* fix: fix setting DataPlane readiness probe using GatewayConfiguration * chore: fixup changed sample
1 parent 68cf99d commit 157feba

File tree

4 files changed

+123
-1
lines changed

4 files changed

+123
-1
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,8 @@
127127
- Fix unexpected error logs caused by passing an odd number of arguments to the logger
128128
in the `KongConsumer` reconciler.
129129
[#983](https://github.com/Kong/gateway-operator/pull/983)
130+
- Fix setting `DataPlane`'s readiness probe using `GatewayConfiguration`.
131+
[#1118](https://github.com/Kong/gateway-operator/pull/1118)
130132

131133
### Added
132134

controller/gateway/controller.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -656,7 +656,11 @@ func setDataPlaneOptionsDefaults(opts *operatorv1beta1.DataPlaneOptions, default
656656
if container.Image == "" {
657657
container.Image = defaultImage
658658
}
659-
container.ReadinessProbe = k8sresources.GenerateDataPlaneReadinessProbe(consts.DataPlaneStatusReadyEndpoint)
659+
if container.ReadinessProbe == nil {
660+
// For Gateway we set DataPlane's readiness probe to /status/ready so that
661+
// it's only marked ready when it receives the configuration from the ControlPlane.
662+
container.ReadinessProbe = k8sresources.GenerateDataPlaneReadinessProbe(consts.DataPlaneStatusReadyEndpoint)
663+
}
660664
} else {
661665
// Because we currently require image to be specified for DataPlanes
662666
// we need to add it here. After #20 gets resolved this won't be needed

controller/gateway/controller_test.go

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
networkingv1 "k8s.io/api/networking/v1"
1414
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1515
"k8s.io/apimachinery/pkg/types"
16+
"k8s.io/apimachinery/pkg/util/intstr"
1617
"k8s.io/client-go/kubernetes/scheme"
1718
controllerruntimeclient "sigs.k8s.io/controller-runtime/pkg/client"
1819
fakectrlruntimeclient "sigs.k8s.io/controller-runtime/pkg/client/fake"
@@ -712,6 +713,94 @@ func Test_setDataPlaneOptionsDefaults(t *testing.T) {
712713
},
713714
},
714715
},
716+
{
717+
name: "not providing the readiness probe sets it to default",
718+
input: operatorv1beta1.DataPlaneOptions{
719+
Deployment: operatorv1beta1.DataPlaneDeploymentOptions{},
720+
},
721+
expected: operatorv1beta1.DataPlaneOptions{
722+
Deployment: operatorv1beta1.DataPlaneDeploymentOptions{
723+
DeploymentOptions: operatorv1beta1.DeploymentOptions{
724+
Replicas: lo.ToPtr(int32(1)),
725+
PodTemplateSpec: &corev1.PodTemplateSpec{
726+
Spec: corev1.PodSpec{
727+
Containers: []corev1.Container{
728+
{
729+
Name: consts.DataPlaneProxyContainerName,
730+
Image: consts.DefaultDataPlaneImage,
731+
ReadinessProbe: resources.GenerateDataPlaneReadinessProbe(consts.DataPlaneStatusReadyEndpoint),
732+
},
733+
},
734+
},
735+
},
736+
},
737+
},
738+
},
739+
},
740+
{
741+
name: "providing the readiness probe sets it as expected",
742+
input: operatorv1beta1.DataPlaneOptions{
743+
Deployment: operatorv1beta1.DataPlaneDeploymentOptions{
744+
DeploymentOptions: operatorv1beta1.DeploymentOptions{
745+
PodTemplateSpec: &corev1.PodTemplateSpec{
746+
Spec: corev1.PodSpec{
747+
Containers: []corev1.Container{
748+
{
749+
Name: consts.DataPlaneProxyContainerName,
750+
Image: consts.DefaultDataPlaneImage,
751+
ReadinessProbe: &corev1.Probe{
752+
FailureThreshold: 6,
753+
InitialDelaySeconds: 7,
754+
PeriodSeconds: 8,
755+
SuccessThreshold: 8,
756+
TimeoutSeconds: 9,
757+
ProbeHandler: corev1.ProbeHandler{
758+
HTTPGet: &corev1.HTTPGetAction{
759+
Path: "/endpoint",
760+
Port: intstr.FromInt(4567),
761+
Scheme: corev1.URISchemeHTTP,
762+
},
763+
},
764+
},
765+
},
766+
},
767+
},
768+
},
769+
},
770+
},
771+
},
772+
expected: operatorv1beta1.DataPlaneOptions{
773+
Deployment: operatorv1beta1.DataPlaneDeploymentOptions{
774+
DeploymentOptions: operatorv1beta1.DeploymentOptions{
775+
Replicas: lo.ToPtr(int32(1)),
776+
PodTemplateSpec: &corev1.PodTemplateSpec{
777+
Spec: corev1.PodSpec{
778+
Containers: []corev1.Container{
779+
{
780+
Name: consts.DataPlaneProxyContainerName,
781+
Image: consts.DefaultDataPlaneImage,
782+
ReadinessProbe: &corev1.Probe{
783+
FailureThreshold: 6,
784+
InitialDelaySeconds: 7,
785+
PeriodSeconds: 8,
786+
SuccessThreshold: 8,
787+
TimeoutSeconds: 9,
788+
ProbeHandler: corev1.ProbeHandler{
789+
HTTPGet: &corev1.HTTPGetAction{
790+
Path: "/endpoint",
791+
Port: intstr.FromInt(4567),
792+
Scheme: corev1.URISchemeHTTP,
793+
},
794+
},
795+
},
796+
},
797+
},
798+
},
799+
},
800+
},
801+
},
802+
},
803+
},
715804
}
716805

717806
for _, tc := range testcases {

test/integration/test_gatewayconfiguration.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"github.com/stretchr/testify/require"
99
corev1 "k8s.io/api/core/v1"
1010
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
11+
"k8s.io/apimachinery/pkg/util/intstr"
1112
gatewayv1 "sigs.k8s.io/gateway-api/apis/v1"
1213

1314
operatorv1beta1 "github.com/kong/gateway-operator/api/v1beta1"
@@ -77,6 +78,20 @@ func TestGatewayConfigurationEssentials(t *testing.T) {
7778
},
7879
},
7980
},
81+
ReadinessProbe: &corev1.Probe{
82+
FailureThreshold: 6,
83+
InitialDelaySeconds: 1,
84+
PeriodSeconds: 2,
85+
SuccessThreshold: 2,
86+
TimeoutSeconds: 9,
87+
ProbeHandler: corev1.ProbeHandler{
88+
HTTPGet: &corev1.HTTPGetAction{
89+
Path: "/status/ready",
90+
Port: intstr.FromInt(4567),
91+
Scheme: corev1.URISchemeHTTP,
92+
},
93+
},
94+
},
8095
},
8196
},
8297
},
@@ -178,6 +193,18 @@ func TestGatewayConfigurationEssentials(t *testing.T) {
178193
return true
179194
}
180195
}
196+
if container.ReadinessProbe == nil ||
197+
container.ReadinessProbe.HTTPGet == nil ||
198+
container.ReadinessProbe.HTTPGet.Path != "/status/ready" ||
199+
container.ReadinessProbe.HTTPGet.Port.IntVal != 4567 ||
200+
container.ReadinessProbe.HTTPGet.Scheme != corev1.URISchemeHTTP ||
201+
container.ReadinessProbe.FailureThreshold != 6 ||
202+
container.ReadinessProbe.InitialDelaySeconds != 1 ||
203+
container.ReadinessProbe.PeriodSeconds != 2 ||
204+
container.ReadinessProbe.SuccessThreshold != 2 ||
205+
container.ReadinessProbe.TimeoutSeconds != 9 {
206+
return false
207+
}
181208
return false
182209
}, testutils.GatewayReadyTimeLimit, time.Second)
183210

0 commit comments

Comments
 (0)