From b1f708758c70dfbb3dde4dec7d2f423b7303e661 Mon Sep 17 00:00:00 2001 From: "Dr. Stefan Schimanski" Date: Tue, 30 May 2017 10:58:33 +0200 Subject: [PATCH] aggregation: handle ClusterIPNone correctly --- .../src/k8s.io/apiserver/pkg/util/proxy/proxy.go | 2 ++ .../apiserver/pkg/util/proxy/proxy_test.go | 16 ++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/staging/src/k8s.io/apiserver/pkg/util/proxy/proxy.go b/staging/src/k8s.io/apiserver/pkg/util/proxy/proxy.go index afad35f03b7..4f7051e0da0 100644 --- a/staging/src/k8s.io/apiserver/pkg/util/proxy/proxy.go +++ b/staging/src/k8s.io/apiserver/pkg/util/proxy/proxy.go @@ -101,6 +101,8 @@ func ResolveCluster(services listersv1.ServiceLister, namespace, id string) (*ur port := intstr.FromInt(443) switch { + case svc.Spec.Type == v1.ServiceTypeClusterIP && svc.Spec.ClusterIP == v1.ClusterIPNone: + return nil, fmt.Errorf(`cannot route to service with ClusterIP "None"`) // use IP from a clusterIP for these service types case svc.Spec.Type == v1.ServiceTypeClusterIP, svc.Spec.Type == v1.ServiceTypeLoadBalancer, svc.Spec.Type == v1.ServiceTypeNodePort: svcPort, err := findServicePort(svc, port) diff --git a/staging/src/k8s.io/apiserver/pkg/util/proxy/proxy_test.go b/staging/src/k8s.io/apiserver/pkg/util/proxy/proxy_test.go index 89ad51831fe..ddcee7a8aad 100644 --- a/staging/src/k8s.io/apiserver/pkg/util/proxy/proxy_test.go +++ b/staging/src/k8s.io/apiserver/pkg/util/proxy/proxy_test.go @@ -118,6 +118,22 @@ func TestResolve(t *testing.T) { clusterMode: expectation{url: "https://hit:443"}, endpointMode: expectation{error: true}, }, + { + name: "none cluster ip", + services: []*v1.Service{ + { + ObjectMeta: metav1.ObjectMeta{Namespace: "one", Name: "alfa"}, + Spec: v1.ServiceSpec{ + Type: v1.ServiceTypeClusterIP, + ClusterIP: v1.ClusterIPNone, + }, + }, + }, + endpoints: nil, + + clusterMode: expectation{error: true}, + endpointMode: expectation{error: true}, + }, { name: "loadbalancer", services: []*v1.Service{