From b28577a4bf5d47565d86a3feb518d4946ab4f18d Mon Sep 17 00:00:00 2001 From: Colstuwjx Date: Tue, 11 Jun 2019 10:32:17 +0800 Subject: [PATCH] Fix: fillout missing health check timeout on health check. --- cmd/nginx/flags.go | 8 ++++++-- internal/ingress/controller/controller.go | 1 - internal/nginx/main.go | 16 +++++++++------- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/cmd/nginx/flags.go b/cmd/nginx/flags.go index 537b4770ba..0615d94ef7 100644 --- a/cmd/nginx/flags.go +++ b/cmd/nginx/flags.go @@ -20,6 +20,7 @@ import ( "flag" "fmt" "os" + "time" "github.com/spf13/pflag" @@ -97,7 +98,7 @@ Takes the form "namespace/name".`) Configured inside the NGINX status server. All requests received on the port defined by the healthz-port parameter are forwarded internally to this path.`) - healthCheckTimeout = flags.Duration("health-check-timeout", 10, `Time limit, in seconds, for a probe to health-check-path to succeed.`) + defHealthCheckTimeout = flags.Int("health-check-timeout", 10, `Time limit, in seconds, for a probe to health-check-path to succeed.`) updateStatus = flags.Bool("update-status", true, `Update the load-balancer status of Ingress objects this controller satisfies. @@ -232,6 +233,10 @@ Takes the form ":port". If not provided, no admission controller is starte nginx.HealthPath = *defHealthzURL + if *defHealthCheckTimeout > 0 { + nginx.HealthCheckTimeout = time.Duration(*defHealthCheckTimeout) * time.Second + } + config := &controller.Configuration{ APIServerHost: *apiserverHost, KubeConfigFile: *kubeConfigFile, @@ -249,7 +254,6 @@ Takes the form ":port". If not provided, no admission controller is starte TCPConfigMapName: *tcpConfigMapName, UDPConfigMapName: *udpConfigMapName, DefaultSSLCertificate: *defSSLCertificate, - HealthCheckTimeout: *healthCheckTimeout, PublishService: *publishSvc, PublishStatusAddress: *publishStatusAddress, UpdateStatusOnShutdown: *updateStatusOnShutdown, diff --git a/internal/ingress/controller/controller.go b/internal/ingress/controller/controller.go index e93a91e88b..4d1f3d326a 100644 --- a/internal/ingress/controller/controller.go +++ b/internal/ingress/controller/controller.go @@ -64,7 +64,6 @@ type Configuration struct { // +optional UDPConfigMapName string - HealthCheckTimeout time.Duration DefaultSSLCertificate string // +optional diff --git a/internal/nginx/main.go b/internal/nginx/main.go index 30dffd9676..9043670341 100644 --- a/internal/nginx/main.go +++ b/internal/nginx/main.go @@ -38,6 +38,9 @@ var StatusSocket = "/tmp/nginx-status-server.sock" // HealthPath defines the path used to define the health check location in NGINX var HealthPath = "/healthz" +// HealthCheckTimeout defines the time limit in seconds for a probe to health-check-path to succeed +var HealthCheckTimeout = 10 * time.Second + // StatusPath defines the path used to expose the NGINX status page // http://nginx.org/en/docs/http/ngx_http_stub_status_module.html var StatusPath = "/nginx_status" @@ -47,12 +50,11 @@ var StreamSocket = "/tmp/ingress-stream.sock" var statusLocation = "nginx-status" -var socketClient = buildUnixSocketClient() - // NewGetStatusRequest creates a new GET request to the internal NGINX status server func NewGetStatusRequest(path string) (int, []byte, error) { url := fmt.Sprintf("http+unix://%v%v", statusLocation, path) - res, err := socketClient.Get(url) + + res, err := buildUnixSocketClient(HealthCheckTimeout).Get(url) if err != nil { return 0, nil, err } @@ -75,7 +77,7 @@ func NewPostStatusRequest(path, contentType string, data interface{}) (int, []by return 0, nil, err } - res, err := socketClient.Post(url, contentType, bytes.NewReader(buf)) + res, err := buildUnixSocketClient(HealthCheckTimeout).Post(url, contentType, bytes.NewReader(buf)) if err != nil { return 0, nil, err } @@ -128,11 +130,11 @@ func ReadFileToString(path string) (string, error) { return string(contents), nil } -func buildUnixSocketClient() *http.Client { +func buildUnixSocketClient(timeout time.Duration) *http.Client { u := &httpunix.Transport{ DialTimeout: 1 * time.Second, - RequestTimeout: 10 * time.Second, - ResponseHeaderTimeout: 10 * time.Second, + RequestTimeout: timeout, + ResponseHeaderTimeout: timeout, } u.RegisterLocation(statusLocation, StatusSocket)