diff --git a/pkg/cri/server/image_pull.go b/pkg/cri/server/image_pull.go index 8a6a8bf0f..606775d8a 100644 --- a/pkg/cri/server/image_pull.go +++ b/pkg/cri/server/image_pull.go @@ -373,6 +373,9 @@ func (c *criService) registryHosts(ctx context.Context, auth *runtime.AuthConfig if err != nil { return nil, errors.Wrapf(err, "get TLSConfig for registry %q", e) } + } else if isLocalHost(host) && u.Scheme == "http" { + // Skipping TLS verification for localhost + transport.TLSClientConfig.InsecureSkipVerify = true } // Make a copy of `auth`, so that different authorizers would not reference @@ -406,15 +409,26 @@ func (c *criService) registryHosts(ctx context.Context, auth *runtime.AuthConfig // defaultScheme returns the default scheme for a registry host. func defaultScheme(host string) string { - if h, _, err := net.SplitHostPort(host); err == nil { - host = h - } - if host == "localhost" || host == "127.0.0.1" || host == "::1" { + if isLocalHost(host) { return "http" } return "https" } +// isLocalHost checks if the registry host is local. +func isLocalHost(host string) bool { + if h, _, err := net.SplitHostPort(host); err == nil { + host = h + } + + if host == "localhost" { + return true + } + + ip := net.ParseIP(host) + return ip.IsLoopback() +} + // addDefaultScheme returns the endpoint with default scheme func addDefaultScheme(endpoint string) (string, error) { if strings.Contains(endpoint, "://") {