feat: grpc health service
Overview
Implements gRPC Health check using standard grpc library.
Reuses the health as reported by gosundheit health checker. Grpc health server implements also streaming Watch method, so it was necessary to add Stop() failback to stop server even if some clients ignore NOT_SERVING status. Timeout for graceful shutdown was chosen to match timeouts for http and telemetry servers.
What this PR does / why we need it
Dex already provides health check endpoint via HTTP. For integrations based on
gRPC, notably if we want to use client-side health checks for higher reliability,
as described here, we also need
to report service health using grpc.health.v1.Health service.
Special notes for your reviewer
Golang is not my mother tongue, so if there is something utterly wrong, please let me know.