func()

in internal/workload/podspec_updates.go [834:905]


func (s *updateState) addHealthCheck(p *cloudsqlapi.AuthProxyWorkload, c *corev1.Container) int32 {
	var portPtr *int32
	var adminPortPtr *int32

	cs := p.Spec.AuthProxyContainer

	// if the TelemetrySpec.exists, get Port and Port values
	if cs != nil && cs.Telemetry != nil {
		if cs.Telemetry.HTTPPort != nil {
			portPtr = cs.Telemetry.HTTPPort
		}
	}

	port := s.usePort(portPtr, DefaultHealthCheckPort, p)

	c.StartupProbe = &corev1.Probe{
		ProbeHandler: corev1.ProbeHandler{HTTPGet: &corev1.HTTPGetAction{
			Port: intstr.IntOrString{IntVal: port},
			Path: "/startup",
		}},
		PeriodSeconds:    1,
		FailureThreshold: 60,
		TimeoutSeconds:   10,
	}
	c.LivenessProbe = &corev1.Probe{
		ProbeHandler: corev1.ProbeHandler{HTTPGet: &corev1.HTTPGetAction{
			Port: intstr.IntOrString{IntVal: port},
			Path: "/liveness",
		}},
		PeriodSeconds:    10,
		FailureThreshold: 3,
		TimeoutSeconds:   10,
	}

	// Add a port that is associated with the proxy, but not a specific db instance
	s.addProxyPort(port, p)
	s.addProxyContainerEnvVar(p, "CSQL_PROXY_HTTP_PORT", fmt.Sprintf("%d", port))
	s.addProxyContainerEnvVar(p, "CSQL_PROXY_HTTP_ADDRESS", "0.0.0.0")
	s.addProxyContainerEnvVar(p, "CSQL_PROXY_HEALTH_CHECK", "true")
	// For graceful exits as a sidecar, the proxy should exit with exit code 0
	// when it receives a SIGTERM.
	s.addProxyContainerEnvVar(p, "CSQL_PROXY_EXIT_ZERO_ON_SIGTERM", "true")

	// Add a containerPort declaration for the healthcheck & telemetry port
	c.Ports = append(c.Ports, corev1.ContainerPort{
		ContainerPort: port,
		Protocol:      corev1.ProtocolTCP,
	})

	// Also the operator will enable the /quitquitquit endpoint for graceful exit.
	// If the AdminServer.Port is set, use it, otherwise use the default
	// admin port.
	if cs != nil && cs.AdminServer != nil && cs.AdminServer.Port != 0 {
		adminPortPtr = &cs.AdminServer.Port
	}
	adminPort := s.usePort(adminPortPtr, DefaultAdminPort, p)
	s.addAdminPort(adminPort)
	s.addProxyContainerEnvVar(p, "CSQL_PROXY_QUITQUITQUIT", "true")
	s.addProxyContainerEnvVar(p, "CSQL_PROXY_ADMIN_PORT", fmt.Sprintf("%d", adminPort))

	// Configure the pre-stop hook for /quitquitquit
	c.Lifecycle = &corev1.Lifecycle{
		PreStop: &corev1.LifecycleHandler{
			HTTPGet: &corev1.HTTPGetAction{
				Port: intstr.IntOrString{IntVal: adminPort},
				Path: "/quitquitquit",
				Host: "localhost",
			},
		},
	}
	return adminPort
}