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
}