diff --git a/staging/src/k8s.io/apiserver/pkg/util/peerproxy/peerproxy_handler.go b/staging/src/k8s.io/apiserver/pkg/util/peerproxy/peerproxy_handler.go index 8e236a7505c..c1a77791d7f 100644 --- a/staging/src/k8s.io/apiserver/pkg/util/peerproxy/peerproxy_handler.go +++ b/staging/src/k8s.io/apiserver/pkg/util/peerproxy/peerproxy_handler.go @@ -199,7 +199,8 @@ func (h *peerProxyHandler) resolveServingLocation(apiservers *sync.Map) (bool, [ apiserverKey := key.(string) if apiserverKey == h.serverId { locallyServiceable = true - // stop iteration + // stop iteration and reset any errors encountered so far. + respErr = nil return false } diff --git a/staging/src/k8s.io/apiserver/pkg/util/peerproxy/peerproxy_handler_test.go b/staging/src/k8s.io/apiserver/pkg/util/peerproxy/peerproxy_handler_test.go index f9c9aec9e26..4fb45f30243 100644 --- a/staging/src/k8s.io/apiserver/pkg/util/peerproxy/peerproxy_handler_test.go +++ b/staging/src/k8s.io/apiserver/pkg/util/peerproxy/peerproxy_handler_test.go @@ -285,7 +285,10 @@ func TestPeerProxy(t *testing.T) { } req.Header.Set(PeerProxiedHeader, tt.peerproxiedHeader) - resp, _ := requestGetter(req) + resp, err := requestGetter(req) + if err != nil { + t.Fatalf("unexpected error trying to get the request: %v", err) + } // compare response assert.Equal(t, tt.expectedStatus, resp.StatusCode) diff --git a/test/integration/apiserver/peerproxy/peer_proxy_test.go b/test/integration/apiserver/peerproxy/peer_proxy_test.go index 9db36d07df7..5f6c5e74821 100644 --- a/test/integration/apiserver/peerproxy/peer_proxy_test.go +++ b/test/integration/apiserver/peerproxy/peer_proxy_test.go @@ -133,12 +133,13 @@ func TestPeerProxiedRequestToThirdServerAfterFirstDies(t *testing.T) { // set lease duration to 1s for serverA to ensure that storageversions for serverA are updated // once it is shutdown controlplaneapiserver.IdentityLeaseDurationSeconds = 10 - controlplaneapiserver.IdentityLeaseGCPeriod = time.Second - controlplaneapiserver.IdentityLeaseRenewIntervalPeriod = 10 * time.Second + controlplaneapiserver.IdentityLeaseGCPeriod = 2 * time.Second + controlplaneapiserver.IdentityLeaseRenewIntervalPeriod = time.Second // start serverA with all APIs enabled // override hostname to ensure unique ips server.SetHostnameFuncForTests("test-server-a") + t.Log("starting apiserver for ServerA") serverA := kastesting.StartTestServerOrDie(t, &kastesting.TestServerInstanceOptions{EnableCertAuth: true, ProxyCA: &proxyCA}, []string{}, etcd) kubeClientSetA, err := kubernetes.NewForConfig(serverA.ClientConfig) require.NoError(t, err) @@ -153,6 +154,7 @@ func TestPeerProxiedRequestToThirdServerAfterFirstDies(t *testing.T) { // start serverB with some api disabled // override hostname to ensure unique ips server.SetHostnameFuncForTests("test-server-b") + t.Log("starting apiserver for ServerB") serverB := kastesting.StartTestServerOrDie(t, &kastesting.TestServerInstanceOptions{EnableCertAuth: true, ProxyCA: &proxyCA}, []string{ fmt.Sprintf("--runtime-config=%v", "batch/v1=false")}, etcd) defer serverB.TearDownFn() @@ -165,6 +167,7 @@ func TestPeerProxiedRequestToThirdServerAfterFirstDies(t *testing.T) { // start serverC with all APIs enabled // override hostname to ensure unique ips server.SetHostnameFuncForTests("test-server-c") + t.Log("starting apiserver for ServerC") serverC := kastesting.StartTestServerOrDie(t, &kastesting.TestServerInstanceOptions{EnableCertAuth: true, ProxyCA: &proxyCA}, []string{}, etcd) defer serverC.TearDownFn() @@ -180,14 +183,24 @@ func TestPeerProxiedRequestToThirdServerAfterFirstDies(t *testing.T) { var jobsB *v1.JobList // list jobs using ServerB which it should proxy to ServerC and get back valid response - err = wait.PollImmediate(1*time.Second, 1*time.Minute, func() (bool, error) { + err = wait.PollUntilContextTimeout(ctx, 1*time.Second, 1*time.Minute, false, func(ctx context.Context) (bool, error) { + select { + case <-ctx.Done(): + return false, ctx.Err() + default: + } + + t.Log("retrieving jobs from ServerB") jobsB, err = kubeClientSetB.BatchV1().Jobs("default").List(context.Background(), metav1.ListOptions{}) if err != nil { + t.Logf("error trying to list jobs from ServerB: %v", err) return false, nil } + if jobsB != nil { return true, nil } + t.Log("retrieved nil jobs from ServerB") return false, nil }) klog.Infof("\nServerB has retrieved jobs list of length %v \n\n", len(jobsB.Items))