mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	Merge pull request #77167 from paulsubrata55/spaul-kube-proxy-fix
Fix for kube-proxy to wait for some duration for the node to be defined.
This commit is contained in:
		@@ -137,6 +137,9 @@ func newProxyServer(
 | 
				
			|||||||
	nodeIP := net.ParseIP(config.BindAddress)
 | 
						nodeIP := net.ParseIP(config.BindAddress)
 | 
				
			||||||
	if nodeIP.IsUnspecified() {
 | 
						if nodeIP.IsUnspecified() {
 | 
				
			||||||
		nodeIP = utilnode.GetNodeIP(client, hostname)
 | 
							nodeIP = utilnode.GetNodeIP(client, hostname)
 | 
				
			||||||
 | 
							if nodeIP == nil {
 | 
				
			||||||
 | 
								return nil, fmt.Errorf("unable to get node IP for hostname %s", hostname)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if proxyMode == proxyModeIPTables {
 | 
						if proxyMode == proxyModeIPTables {
 | 
				
			||||||
		klog.V(0).Info("Using iptables Proxier.")
 | 
							klog.V(0).Info("Using iptables Proxier.")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,6 +16,7 @@ go_library(
 | 
				
			|||||||
        "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
 | 
					        "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
 | 
				
			||||||
        "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
 | 
					        "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
 | 
				
			||||||
        "//staging/src/k8s.io/apimachinery/pkg/util/strategicpatch:go_default_library",
 | 
					        "//staging/src/k8s.io/apimachinery/pkg/util/strategicpatch:go_default_library",
 | 
				
			||||||
 | 
					        "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
 | 
				
			||||||
        "//staging/src/k8s.io/client-go/kubernetes:go_default_library",
 | 
					        "//staging/src/k8s.io/client-go/kubernetes:go_default_library",
 | 
				
			||||||
        "//staging/src/k8s.io/client-go/kubernetes/typed/core/v1:go_default_library",
 | 
					        "//staging/src/k8s.io/client-go/kubernetes/typed/core/v1:go_default_library",
 | 
				
			||||||
        "//vendor/k8s.io/klog:go_default_library",
 | 
					        "//vendor/k8s.io/klog:go_default_library",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -31,6 +31,7 @@ import (
 | 
				
			|||||||
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
						metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/types"
 | 
						"k8s.io/apimachinery/pkg/types"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/util/strategicpatch"
 | 
						"k8s.io/apimachinery/pkg/util/strategicpatch"
 | 
				
			||||||
 | 
						"k8s.io/apimachinery/pkg/util/wait"
 | 
				
			||||||
	clientset "k8s.io/client-go/kubernetes"
 | 
						clientset "k8s.io/client-go/kubernetes"
 | 
				
			||||||
	v1core "k8s.io/client-go/kubernetes/typed/core/v1"
 | 
						v1core "k8s.io/client-go/kubernetes/typed/core/v1"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@@ -107,17 +108,31 @@ func GetNodeHostIP(node *v1.Node) (net.IP, error) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// GetNodeIP returns the ip of node with the provided hostname
 | 
					// GetNodeIP returns the ip of node with the provided hostname
 | 
				
			||||||
 | 
					// If required, wait for the node to be defined.
 | 
				
			||||||
func GetNodeIP(client clientset.Interface, hostname string) net.IP {
 | 
					func GetNodeIP(client clientset.Interface, hostname string) net.IP {
 | 
				
			||||||
	var nodeIP net.IP
 | 
						var nodeIP net.IP
 | 
				
			||||||
	node, err := client.CoreV1().Nodes().Get(hostname, metav1.GetOptions{})
 | 
						backoff := wait.Backoff{
 | 
				
			||||||
	if err != nil {
 | 
							Steps:    5,
 | 
				
			||||||
		klog.Warningf("Failed to retrieve node info: %v", err)
 | 
							Duration: 1 * time.Second,
 | 
				
			||||||
		return nil
 | 
							Factor:   2.0,
 | 
				
			||||||
 | 
							Jitter:   0.2,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	nodeIP, err = GetNodeHostIP(node)
 | 
					
 | 
				
			||||||
	if err != nil {
 | 
						err := wait.ExponentialBackoff(backoff, func() (bool, error) {
 | 
				
			||||||
		klog.Warningf("Failed to retrieve node IP: %v", err)
 | 
							node, err := client.CoreV1().Nodes().Get(hostname, metav1.GetOptions{})
 | 
				
			||||||
		return nil
 | 
							if err != nil {
 | 
				
			||||||
 | 
								klog.Errorf("Failed to retrieve node info: %v", err)
 | 
				
			||||||
 | 
								return false, nil
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							nodeIP, err = GetNodeHostIP(node)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								klog.Errorf("Failed to retrieve node IP: %v", err)
 | 
				
			||||||
 | 
								return false, err
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return true, nil
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
						if err == nil {
 | 
				
			||||||
 | 
							klog.Infof("Successfully retrieved node IP: %v", nodeIP)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return nodeIP
 | 
						return nodeIP
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user