Skip to content

Commit 7ce7a80

Browse files
authored
Merge pull request kubernetes#71355 from bradhoekstra/kube-proxy-services-optional
Make kube-proxy service abstraction optional
2 parents f2d7eed + 284cc82 commit 7ce7a80

File tree

3 files changed

+67
-1
lines changed

3 files changed

+67
-1
lines changed

cmd/kube-proxy/app/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ go_library(
4343
"//pkg/version/verflag:go_default_library",
4444
"//staging/src/k8s.io/api/core/v1:go_default_library",
4545
"//staging/src/k8s.io/apimachinery/pkg/apis/config:go_default_library",
46+
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
4647
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
4748
"//staging/src/k8s.io/apimachinery/pkg/runtime/serializer:go_default_library",
4849
"//staging/src/k8s.io/apimachinery/pkg/runtime/serializer/json:go_default_library",

cmd/kube-proxy/app/server.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import (
3030

3131
"k8s.io/api/core/v1"
3232
apimachineryconfig "k8s.io/apimachinery/pkg/apis/config"
33+
v1meta "k8s.io/apimachinery/pkg/apis/meta/v1"
3334
"k8s.io/apimachinery/pkg/runtime"
3435
"k8s.io/apimachinery/pkg/runtime/serializer"
3536
"k8s.io/apimachinery/pkg/runtime/serializer/json"
@@ -560,7 +561,10 @@ func (s *ProxyServer) Run() error {
560561
}
561562
}
562563

563-
informerFactory := informers.NewSharedInformerFactory(s.Client, s.ConfigSyncPeriod)
564+
informerFactory := informers.NewSharedInformerFactoryWithOptions(s.Client, s.ConfigSyncPeriod,
565+
informers.WithTweakListOptions(func(options *v1meta.ListOptions) {
566+
options.LabelSelector = "!service.kubernetes.io/service-proxy-name"
567+
}))
564568

565569
// Create configs (i.e. Watches for Services and Endpoints)
566570
// Note: RegisterHandler() calls need to happen before creation of Sources because sources

test/e2e/network/service.go

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1687,6 +1687,67 @@ var _ = SIGDescribe("Services", func() {
16871687
svc.Spec.ExternalTrafficPolicy = v1.ServiceExternalTrafficPolicyTypeCluster
16881688
execAffinityTestForLBService(f, cs, svc, true)
16891689
})
1690+
1691+
It("should implement service.kubernetes.io/service-proxy-name", func() {
1692+
// this test uses framework.NodeSSHHosts that does not work if a Node only reports LegacyHostIP
1693+
framework.SkipUnlessProviderIs(framework.ProvidersWithSSH...)
1694+
// this test does not work if the Node does not support SSH Key
1695+
framework.SkipUnlessSSHKeyPresent()
1696+
1697+
ns := f.Namespace.Name
1698+
numPods, servicePort := 3, defaultServeHostnameServicePort
1699+
serviceProxyNameLabels := map[string]string{"service.kubernetes.io/service-proxy-name": "foo-bar"}
1700+
1701+
// We will create 2 services to test creating services in both states and also dynamic updates
1702+
// svcDisabled: Created with the label, will always be disabled. We create this early and
1703+
// test again late to make sure it never becomes available.
1704+
// svcToggled: Created without the label then the label is toggled verifying reachability at each step.
1705+
1706+
By("creating service-disabled in namespace " + ns)
1707+
svcDisabled := getServeHostnameService("service-disabled")
1708+
svcDisabled.ObjectMeta.Labels = serviceProxyNameLabels
1709+
_, svcDisabledIP, err := framework.StartServeHostnameService(cs, internalClientset, svcDisabled, ns, numPods)
1710+
Expect(err).NotTo(HaveOccurred())
1711+
1712+
By("creating service in namespace " + ns)
1713+
svcToggled := getServeHostnameService("service")
1714+
podToggledNames, svcToggledIP, err := framework.StartServeHostnameService(cs, internalClientset, svcToggled, ns, numPods)
1715+
Expect(err).NotTo(HaveOccurred())
1716+
1717+
jig := framework.NewServiceTestJig(cs, svcToggled.ObjectMeta.Name)
1718+
1719+
hosts, err := framework.NodeSSHHosts(cs)
1720+
Expect(err).NotTo(HaveOccurred())
1721+
if len(hosts) == 0 {
1722+
framework.Failf("No ssh-able nodes")
1723+
}
1724+
host := hosts[0]
1725+
1726+
By("verifying service is up")
1727+
framework.ExpectNoError(framework.VerifyServeHostnameServiceUp(cs, ns, host, podToggledNames, svcToggledIP, servicePort))
1728+
1729+
By("verifying service-disabled is not up")
1730+
framework.ExpectNoError(framework.VerifyServeHostnameServiceDown(cs, host, svcDisabledIP, servicePort))
1731+
1732+
By("adding service-proxy-name label")
1733+
jig.UpdateServiceOrFail(ns, svcToggled.ObjectMeta.Name, func(svc *v1.Service) {
1734+
svc.ObjectMeta.Labels = serviceProxyNameLabels
1735+
})
1736+
1737+
By("verifying service is not up")
1738+
framework.ExpectNoError(framework.VerifyServeHostnameServiceDown(cs, host, svcToggledIP, servicePort))
1739+
1740+
By("removing service-proxy-name annotation")
1741+
jig.UpdateServiceOrFail(ns, svcToggled.ObjectMeta.Name, func(svc *v1.Service) {
1742+
svc.ObjectMeta.Labels = nil
1743+
})
1744+
1745+
By("verifying service is up")
1746+
framework.ExpectNoError(framework.VerifyServeHostnameServiceUp(cs, ns, host, podToggledNames, svcToggledIP, servicePort))
1747+
1748+
By("verifying service-disabled is still not up")
1749+
framework.ExpectNoError(framework.VerifyServeHostnameServiceDown(cs, host, svcDisabledIP, servicePort))
1750+
})
16901751
})
16911752

16921753
// TODO: Get rid of [DisabledForLargeClusters] tag when issue #56138 is fixed.

0 commit comments

Comments
 (0)