Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelogs/unreleased/5101-izturn-small.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Gateway provisioner: add a container port to the Envoy daemonset/deployment for the metrics port.
6 changes: 6 additions & 0 deletions internal/provisioner/controller/gateway_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -355,6 +355,9 @@ func TestGatewayReconcile(t *testing.T) {
Listener: &contourv1alpha1.EnvoyListenerConfig{
DisableMergeSlashes: ref.To(true),
},
Metrics: &contourv1alpha1.MetricsConfig{
Port: 8003,
},
},
},
},
Expand Down Expand Up @@ -402,6 +405,9 @@ func TestGatewayReconcile(t *testing.T) {
Namespace: gw.Namespace,
Name: "envoy-" + gw.Name,
},
Metrics: &contourv1alpha1.MetricsConfig{
Port: 8003,
},
},
}

Expand Down
32 changes: 25 additions & 7 deletions internal/provisioner/objects/dataplane/dataplane.go
Original file line number Diff line number Diff line change
Expand Up @@ -136,14 +136,32 @@ func desiredContainers(contour *model.Contour, contourImage, envoyImage string)
ports = append(ports, p)
}

healthPort := 8002
var (
metricsPort = objects.EnvoyMetricsPort
healthPort = objects.EnvoyHealthPort
)

if contour.Spec.RuntimeSettings != nil &&
contour.Spec.RuntimeSettings.Envoy != nil &&
contour.Spec.RuntimeSettings.Envoy.Health != nil &&
contour.Spec.RuntimeSettings.Envoy.Health.Port > 0 {
healthPort = contour.Spec.RuntimeSettings.Envoy.Health.Port
contour.Spec.RuntimeSettings.Envoy != nil {

if contour.Spec.RuntimeSettings.Envoy.Metrics != nil &&
contour.Spec.RuntimeSettings.Envoy.Metrics.Port > 0 {
metricsPort = int32(contour.Spec.RuntimeSettings.Envoy.Metrics.Port)

}

if contour.Spec.RuntimeSettings.Envoy.Health != nil &&
contour.Spec.RuntimeSettings.Envoy.Health.Port > 0 {
healthPort = contour.Spec.RuntimeSettings.Envoy.Health.Port
}
}

ports = append(ports, corev1.ContainerPort{
Name: "metrics",
ContainerPort: metricsPort,
Protocol: corev1.ProtocolTCP,
})

containers := []corev1.Container{
{
Name: ShutdownContainerName,
Expand Down Expand Up @@ -511,12 +529,12 @@ func envoyPodAnnotations(contour *model.Contour) map[string]string {
annotations[k] = v
}

metricsPort := 8002
metricsPort := objects.EnvoyMetricsPort
if contour.Spec.RuntimeSettings != nil &&
contour.Spec.RuntimeSettings.Envoy != nil &&
contour.Spec.RuntimeSettings.Envoy.Metrics != nil &&
contour.Spec.RuntimeSettings.Envoy.Metrics.Port > 0 {
metricsPort = contour.Spec.RuntimeSettings.Envoy.Metrics.Port
metricsPort = int32(contour.Spec.RuntimeSettings.Envoy.Metrics.Port)
}

annotations["prometheus.io/scrape"] = "true"
Expand Down
20 changes: 15 additions & 5 deletions internal/provisioner/objects/dataplane/dataplane_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import (

"github.com/projectcontour/contour/apis/projectcontour/v1alpha1"
"github.com/projectcontour/contour/internal/provisioner/model"
"github.com/stretchr/testify/assert"
"github.com/projectcontour/contour/internal/provisioner/objects"

appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
Expand Down Expand Up @@ -294,13 +294,19 @@ func TestDesiredDaemonSet(t *testing.T) {

// Change the Envoy log level to test --log-level debug.
cntr.Spec.EnvoyLogLevel = v1alpha1.DebugLog
cntr.Spec.RuntimeSettings = &v1alpha1.ContourConfigurationSpec{
Envoy: &v1alpha1.EnvoyConfig{
Metrics: &v1alpha1.MetricsConfig{
Port: int(objects.EnvoyMetricsPort),
},
},
}

ds := DesiredDaemonSet(cntr, testContourImage, testEnvoyImage)
container := checkDaemonSetHasContainer(t, ds, EnvoyContainerName, true)
checkContainerHasArg(t, container, testLogLevelArg)
checkContainerHasImage(t, container, testEnvoyImage)
checkContainerHasReadinessPort(t, container, 8002)
assert.Len(t, container.Ports, 2)

container = checkDaemonSetHasContainer(t, ds, ShutdownContainerName, true)
checkContainerHasImage(t, container, testContourImage)
Expand All @@ -313,12 +319,14 @@ func TestDesiredDaemonSet(t *testing.T) {
for _, port := range cntr.Spec.NetworkPublishing.Envoy.Ports {
checkContainerHasPort(t, ds, port.ContainerPort)
}
checkContainerHasPort(t, ds, int32(cntr.Spec.RuntimeSettings.Envoy.Metrics.Port))

checkDaemonSetHasNodeSelector(t, ds, nil)
checkDaemonSetHasTolerations(t, ds, nil)
checkDaemonSecurityContext(t, ds)
checkDaemonSetHasVolume(t, ds, volTest, volTestMount)
checkDaemonSetHasPodAnnotations(t, ds, envoyPodAnnotations(cntr))
checkDaemonSetHasMetricsPort(t, ds, 8002)
checkDaemonSetHasMetricsPort(t, ds, objects.EnvoyMetricsPort)

checkDaemonSetHasResourceRequirements(t, ds, resQutoa)
checkDaemonSetHasUpdateStrategy(t, ds, cntr.Spec.EnvoyDaemonSetUpdateStrategy)
Expand Down Expand Up @@ -365,22 +373,24 @@ func TestNodePlacementDaemonSet(t *testing.T) {

func TestEnvoyCustomPorts(t *testing.T) {
name := "envoy-runtime-ports"
metricPort := 9090
cntr := model.Default(fmt.Sprintf("%s-ns", name), name)
cntr.Spec.RuntimeSettings = &v1alpha1.ContourConfigurationSpec{
Envoy: &v1alpha1.EnvoyConfig{
Health: &v1alpha1.HealthConfig{
Port: 8020,
},
Metrics: &v1alpha1.MetricsConfig{
Port: 9090,
Port: metricPort,
},
},
}

testContourImage := "ghcr.io/projectcontour/contour:test"
testEnvoyImage := "docker.io/envoyproxy/envoy:test"
ds := DesiredDaemonSet(cntr, testContourImage, testEnvoyImage)
checkDaemonSetHasMetricsPort(t, ds, 9090)
checkDaemonSetHasMetricsPort(t, ds, int32(metricPort))
checkContainerHasPort(t, ds, int32(metricPort))

container := checkDaemonSetHasContainer(t, ds, EnvoyContainerName, true)
checkContainerHasReadinessPort(t, container, 8020)
Expand Down
6 changes: 6 additions & 0 deletions internal/provisioner/objects/object.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,12 @@ const (
EnvoyInsecureContainerPort = int32(8080)
// EnvoySecureContainerPort is the network port number of Envoy's secure listener.
EnvoySecureContainerPort = int32(8443)

// EnvoyMetricsPort is the network port number of Envoy's metrics listener.
EnvoyMetricsPort = int32(8002)

// EnvoyHealthPort is the network port number of Envoy's health listener.
EnvoyHealthPort = 8002
)

// NewUnprivilegedPodSecurity makes a a non-root PodSecurityContext object
Expand Down