Skip to content

Commit eeb8c2b

Browse files
Sharathmk99adamjensenbot
authored andcommitted
flag to use host api server host & port
1 parent 7afdc63 commit eeb8c2b

File tree

10 files changed

+158
-28
lines changed

10 files changed

+158
-28
lines changed

cmd/virtual-kubelet/root/flag.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,10 @@ func InstallFlags(flags *pflag.FlagSet, o *Opts) {
7272
flags.BoolVar(&o.EnableStorage, "enable-storage", false, "Enable the Liqo storage reflection")
7373
flags.StringVar(&o.VirtualStorageClassName, "virtual-storage-class-name", "liqo", "Name of the virtual storage class")
7474
flags.StringVar(&o.RemoteRealStorageClassName, "remote-real-storage-class-name", "", "Name of the real storage class to use for the actual volumes")
75+
flags.StringVar(&o.HomeAPIServerHost, "home-api-server-host", "",
76+
"Home cluster API server HOST, this parameter is optional and required only to override the default values")
77+
flags.StringVar(&o.HomeAPIServerPort, "home-api-server-port", "",
78+
"Home cluster API server PORT, this parameter is optional and required only to override the default values")
7579

7680
flagset := flag.NewFlagSet("klog", flag.PanicOnError)
7781
klog.InitFlags(flagset)

cmd/virtual-kubelet/root/opts.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,9 @@ type Opts struct {
9696
EnableStorage bool
9797
VirtualStorageClassName string
9898
RemoteRealStorageClassName string
99+
100+
HomeAPIServerHost string
101+
HomeAPIServerPort string
99102
}
100103

101104
// NewOpts returns an Opts struct with the default values set.

cmd/virtual-kubelet/root/root.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,9 @@ func runRootCommand(ctx context.Context, c *Opts) error {
110110
EnableStorage: c.EnableStorage,
111111
VirtualStorageClassName: c.VirtualStorageClassName,
112112
RemoteRealStorageClassName: c.RemoteRealStorageClassName,
113+
114+
HomeAPIServerHost: c.HomeAPIServerHost,
115+
HomeAPIServerPort: c.HomeAPIServerPort,
113116
}
114117

115118
eb := record.NewBroadcaster()

pkg/virtualKubelet/forge/pods.go

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ func RemotePodSpec(creation bool, local, remote *corev1.PodSpec, mutators ...Rem
228228

229229
// APIServerSupportMutator is a mutator which implements the support to enable offloaded pods to interact back with the local Kubernetes API server.
230230
func APIServerSupportMutator(apiServerSupport APIServerSupportType, saName string, saSecretRetriever SASecretRetriever,
231-
kubernetesServiceIPRetriever KubernetesServiceIPGetter) RemotePodSpecMutator {
231+
kubernetesServiceIPRetriever KubernetesServiceIPGetter, homeAPIServerHost string, homeAPIServerPort string) RemotePodSpecMutator {
232232
return func(remote *corev1.PodSpec) {
233233
// The mutation of the service account related volume needs to be performed regardless of whether this feature is enabled.
234234
remote.Volumes = RemoteVolumes(remote.Volumes, apiServerSupport, func() string { return saSecretRetriever(saName) })
@@ -239,11 +239,13 @@ func APIServerSupportMutator(apiServerSupport APIServerSupportType, saName strin
239239
}
240240

241241
// Mutate the environment variables of the containers concerning the target API server hostname, and the service account name.
242-
remote.Containers = RemoteContainersAPIServerSupport(remote.Containers, saName)
243-
remote.InitContainers = RemoteContainersAPIServerSupport(remote.InitContainers, saName)
242+
remote.Containers = RemoteContainersAPIServerSupport(remote.Containers, saName, homeAPIServerHost, homeAPIServerPort)
243+
remote.InitContainers = RemoteContainersAPIServerSupport(remote.InitContainers, saName, homeAPIServerHost, homeAPIServerPort)
244244

245245
// Add a custom host alias to reach "kubernetes.default" through the remapped IP address.
246-
remote.HostAliases = RemoteHostAliasesAPIServerSupport(remote.HostAliases, kubernetesServiceIPRetriever)
246+
if homeAPIServerHost == "" && homeAPIServerPort == "" {
247+
remote.HostAliases = RemoteHostAliasesAPIServerSupport(remote.HostAliases, kubernetesServiceIPRetriever)
248+
}
247249
}
248250
}
249251

@@ -303,9 +305,9 @@ func FilterAntiAffinityLabels(labels map[string]string, whitelist string) map[st
303305

304306
// RemoteContainersAPIServerSupport forges the containers for a reflected pod, appropriately adding the environment variables
305307
// to enable the offloaded containers to contact back the local API server, instead of the remote one.
306-
func RemoteContainersAPIServerSupport(containers []corev1.Container, saName string) []corev1.Container {
308+
func RemoteContainersAPIServerSupport(containers []corev1.Container, saName, homeAPIServerHost, homeAPIServerPort string) []corev1.Container {
307309
for i := range containers {
308-
containers[i].Env = RemoteContainerEnvVariablesAPIServerSupport(containers[i].Env, saName)
310+
containers[i].Env = RemoteContainerEnvVariablesAPIServerSupport(containers[i].Env, saName, homeAPIServerHost, homeAPIServerPort)
309311
}
310312

311313
return containers
@@ -314,7 +316,7 @@ func RemoteContainersAPIServerSupport(containers []corev1.Container, saName stri
314316
// RemoteContainerEnvVariablesAPIServerSupport forges the environment variables to enable offloaded containers to
315317
// contact back the local API server, instead of the remote one. In addition, it also hardcodes the
316318
// service account name in case it was retrieved from the pod spec, as it is not reflected remotely.
317-
func RemoteContainerEnvVariablesAPIServerSupport(envs []corev1.EnvVar, saName string) []corev1.EnvVar {
319+
func RemoteContainerEnvVariablesAPIServerSupport(envs []corev1.EnvVar, saName, homeAPIServerHost, homeAPIServerPort string) []corev1.EnvVar {
318320
for i := range envs {
319321
if envs[i].ValueFrom != nil && envs[i].ValueFrom.FieldRef != nil &&
320322
envs[i].ValueFrom.FieldRef.FieldPath == "spec.serviceAccountName" {
@@ -323,19 +325,24 @@ func RemoteContainerEnvVariablesAPIServerSupport(envs []corev1.EnvVar, saName st
323325
envs[i].ValueFrom = nil
324326
}
325327
}
326-
327-
hostport := "tcp://" + net.JoinHostPort(kubernetesAPIService, KubernetesServicePort)
328+
actualKubernetesAPIService := kubernetesAPIService
329+
actualKubernetesAPIServicePort := KubernetesServicePort
330+
if homeAPIServerHost != "" && homeAPIServerPort != "" {
331+
actualKubernetesAPIService = homeAPIServerHost
332+
actualKubernetesAPIServicePort = homeAPIServerPort
333+
}
334+
hostport := "tcp://" + net.JoinHostPort(actualKubernetesAPIService, actualKubernetesAPIServicePort)
328335
return append(envs,
329336
// We replace the correct IP address with the kubernetes.default hostname (which is associated with the remapped
330337
// IP through an appropriate host alias), since directly using the remapped IP address would lead to TLS errors
331338
// as it is not included in the certificate.
332-
corev1.EnvVar{Name: "KUBERNETES_SERVICE_HOST", Value: kubernetesAPIService},
333-
corev1.EnvVar{Name: "KUBERNETES_SERVICE_PORT", Value: KubernetesServicePort},
339+
corev1.EnvVar{Name: "KUBERNETES_SERVICE_HOST", Value: actualKubernetesAPIService},
340+
corev1.EnvVar{Name: "KUBERNETES_SERVICE_PORT", Value: actualKubernetesAPIServicePort},
334341
corev1.EnvVar{Name: "KUBERNETES_PORT", Value: hostport},
335-
corev1.EnvVar{Name: fmt.Sprintf("KUBERNETES_PORT_%s_TCP", KubernetesServicePort), Value: hostport},
336-
corev1.EnvVar{Name: fmt.Sprintf("KUBERNETES_PORT_%s_TCP_PROTO", KubernetesServicePort), Value: "tcp"},
337-
corev1.EnvVar{Name: fmt.Sprintf("KUBERNETES_PORT_%s_TCP_ADDR", KubernetesServicePort), Value: kubernetesAPIService},
338-
corev1.EnvVar{Name: fmt.Sprintf("KUBERNETES_PORT_%s_TCP_PORT", KubernetesServicePort), Value: KubernetesServicePort},
342+
corev1.EnvVar{Name: fmt.Sprintf("KUBERNETES_PORT_%s_TCP", actualKubernetesAPIServicePort), Value: hostport},
343+
corev1.EnvVar{Name: fmt.Sprintf("KUBERNETES_PORT_%s_TCP_PROTO", actualKubernetesAPIServicePort), Value: "tcp"},
344+
corev1.EnvVar{Name: fmt.Sprintf("KUBERNETES_PORT_%s_TCP_ADDR", actualKubernetesAPIServicePort), Value: actualKubernetesAPIService},
345+
corev1.EnvVar{Name: fmt.Sprintf("KUBERNETES_PORT_%s_TCP_PORT", actualKubernetesAPIServicePort), Value: actualKubernetesAPIServicePort},
339346
)
340347
}
341348

pkg/virtualKubelet/forge/pods_test.go

Lines changed: 113 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
package forge_test
1616

1717
import (
18+
"fmt"
1819
"time"
1920

2021
. "github.com/onsi/ginkgo/v2"
@@ -200,8 +201,9 @@ var _ = Describe("Pod forging", func() {
200201
const saName = "service-account"
201202

202203
var (
203-
apiServerSupport forge.APIServerSupportType
204-
remote, original *corev1.PodSpec
204+
apiServerSupport forge.APIServerSupportType
205+
remote, original *corev1.PodSpec
206+
homeAPIServerHost, homeAPIServerPort string
205207
)
206208

207209
BeforeEach(func() {
@@ -217,7 +219,7 @@ var _ = Describe("Pod forging", func() {
217219

218220
JustBeforeEach(func() {
219221
original = remote.DeepCopy()
220-
forge.APIServerSupportMutator(apiServerSupport, saName, SASecretRetriever, KubernetesServiceIPGetter)(remote)
222+
forge.APIServerSupportMutator(apiServerSupport, saName, SASecretRetriever, KubernetesServiceIPGetter, homeAPIServerHost, homeAPIServerPort)(remote)
221223
})
222224

223225
When("API server support is enabled", func() {
@@ -228,11 +230,12 @@ var _ = Describe("Pod forging", func() {
228230
})
229231

230232
It("should appropriately mutate the remote containers", func() {
231-
Expect(remote.Containers).To(Equal(forge.RemoteContainersAPIServerSupport(original.Containers, saName)))
233+
Expect(remote.Containers).To(Equal(forge.RemoteContainersAPIServerSupport(original.Containers, saName, homeAPIServerHost, homeAPIServerPort)))
232234
})
233235

234236
It("should appropriately mutate the remote init containers", func() {
235-
Expect(remote.InitContainers).To(Equal(forge.RemoteContainersAPIServerSupport(original.InitContainers, saName)))
237+
Expect(remote.InitContainers).To(Equal(forge.RemoteContainersAPIServerSupport(original.InitContainers, saName,
238+
homeAPIServerHost, homeAPIServerPort)))
236239
})
237240

238241
It("should appropriately mutate host aliases", func() {
@@ -241,12 +244,57 @@ var _ = Describe("Pod forging", func() {
241244
}
242245

243246
When("legacy mode is set", func() {
244-
BeforeEach(func() { apiServerSupport = forge.APIServerSupportLegacy })
247+
BeforeEach(func() {
248+
apiServerSupport = forge.APIServerSupportLegacy
249+
homeAPIServerHost = ""
250+
homeAPIServerPort = ""
251+
})
245252
WhenBody()
246253
})
247254

248255
When("token API mode is set", func() {
249-
BeforeEach(func() { apiServerSupport = forge.APIServerSupportTokenAPI })
256+
BeforeEach(func() {
257+
apiServerSupport = forge.APIServerSupportTokenAPI
258+
homeAPIServerHost = ""
259+
homeAPIServerPort = ""
260+
})
261+
WhenBody()
262+
})
263+
})
264+
265+
When("API server support is enabled with custom host API server Host & Port", func() {
266+
267+
WhenBody := func() {
268+
It("should correctly mutate the volumes", func() {
269+
Expect(remote.Volumes).To(Equal(forge.RemoteVolumes(original.Volumes, apiServerSupport,
270+
func() string { return SASecretRetriever(saName) })))
271+
})
272+
273+
It("should appropriately mutate the remote containers", func() {
274+
Expect(remote.Containers).To(Equal(forge.RemoteContainersAPIServerSupport(original.Containers, saName, homeAPIServerHost, homeAPIServerPort)))
275+
})
276+
277+
It("should appropriately mutate the remote init containers", func() {
278+
Expect(remote.InitContainers).To(Equal(forge.RemoteContainersAPIServerSupport(original.InitContainers, saName,
279+
homeAPIServerHost, homeAPIServerPort)))
280+
})
281+
}
282+
283+
When("legacy mode is set with custom host API server Host & Port", func() {
284+
BeforeEach(func() {
285+
apiServerSupport = forge.APIServerSupportLegacy
286+
homeAPIServerHost = "custom.apiserver.com"
287+
homeAPIServerPort = "6443"
288+
})
289+
WhenBody()
290+
})
291+
292+
When("token API mode is set with custom host API server Host & Port", func() {
293+
BeforeEach(func() {
294+
apiServerSupport = forge.APIServerSupportTokenAPI
295+
homeAPIServerHost = "custom1.apiserver.com"
296+
homeAPIServerPort = "6443"
297+
})
250298
WhenBody()
251299
})
252300
})
@@ -392,6 +440,7 @@ var _ = Describe("Pod forging", func() {
392440
Describe("the RemoteContainersAPIServerSupport function", func() {
393441
var container corev1.Container
394442
var output []corev1.Container
443+
var homeAPIServerHost, homeAPIServerPort = "", ""
395444

396445
BeforeEach(func() {
397446
container = corev1.Container{
@@ -410,7 +459,7 @@ var _ = Describe("Pod forging", func() {
410459
})
411460

412461
JustBeforeEach(func() {
413-
output = forge.RemoteContainersAPIServerSupport([]corev1.Container{container}, "service-account-name")
462+
output = forge.RemoteContainersAPIServerSupport([]corev1.Container{container}, "service-account-name", homeAPIServerHost, homeAPIServerPort)
414463
})
415464

416465
It("should propagate all container values", func() {
@@ -443,6 +492,62 @@ var _ = Describe("Pod forging", func() {
443492
})
444493
})
445494

495+
Describe("the RemoteContainersAPIServerSupport function with custom host API server Host & Port", func() {
496+
var container corev1.Container
497+
var output []corev1.Container
498+
var homeAPIServerHost, homeAPIServerPort = "custom.apiserver.com", "6443"
499+
500+
BeforeEach(func() {
501+
container = corev1.Container{
502+
Name: "foo",
503+
Image: "foo/bar:v0.1-alpha3",
504+
Args: []string{"--first", "--second"},
505+
Ports: []corev1.ContainerPort{{Name: "foo-port", ContainerPort: 8080}},
506+
Env: []corev1.EnvVar{
507+
{Name: "ENV_1", Value: "VALUE_1"},
508+
{Name: "ENV_2", Value: "VALUE_2"},
509+
{Name: "ENV_3", ValueFrom: &corev1.EnvVarSource{ConfigMapKeyRef: &corev1.ConfigMapKeySelector{Key: "foo"}}},
510+
{Name: "ENV_4", ValueFrom: &corev1.EnvVarSource{FieldRef: &corev1.ObjectFieldSelector{FieldPath: "spec.nodeName"}}},
511+
{Name: "ENV_5", ValueFrom: &corev1.EnvVarSource{FieldRef: &corev1.ObjectFieldSelector{FieldPath: "spec.serviceAccountName"}}},
512+
},
513+
}
514+
})
515+
516+
JustBeforeEach(func() {
517+
output = forge.RemoteContainersAPIServerSupport([]corev1.Container{container}, "service-account-name", homeAPIServerHost, homeAPIServerPort)
518+
})
519+
520+
It("should propagate all container values", func() {
521+
// Remove the environment variables from the containers, as checked in the test below.
522+
envcleaner := func(c corev1.Container) corev1.Container {
523+
c.Env = nil
524+
return c
525+
}
526+
527+
Expect(output).To(HaveLen(1))
528+
Expect(envcleaner(output[0])).To(Equal(envcleaner(container)))
529+
})
530+
531+
It("should configure the appropriate environment variables", func() {
532+
Expect(output).To(HaveLen(1))
533+
Expect(output[0].Env).To(ConsistOf(
534+
corev1.EnvVar{Name: "ENV_1", Value: "VALUE_1"},
535+
corev1.EnvVar{Name: "ENV_2", Value: "VALUE_2"},
536+
corev1.EnvVar{Name: "ENV_3", ValueFrom: &corev1.EnvVarSource{ConfigMapKeyRef: &corev1.ConfigMapKeySelector{Key: "foo"}}},
537+
corev1.EnvVar{Name: "ENV_4", ValueFrom: &corev1.EnvVarSource{FieldRef: &corev1.ObjectFieldSelector{FieldPath: "spec.nodeName"}}},
538+
corev1.EnvVar{Name: "ENV_5", Value: "service-account-name"},
539+
corev1.EnvVar{Name: "KUBERNETES_SERVICE_PORT", Value: homeAPIServerPort},
540+
corev1.EnvVar{Name: "KUBERNETES_SERVICE_HOST", Value: homeAPIServerHost},
541+
corev1.EnvVar{Name: "KUBERNETES_PORT", Value: fmt.Sprintf("tcp://%s:%s", homeAPIServerHost, homeAPIServerPort)},
542+
corev1.EnvVar{Name: fmt.Sprintf("KUBERNETES_PORT_%s_TCP", homeAPIServerPort),
543+
Value: fmt.Sprintf("tcp://%s:%s", homeAPIServerHost, homeAPIServerPort)},
544+
corev1.EnvVar{Name: fmt.Sprintf("KUBERNETES_PORT_%s_TCP_PROTO", homeAPIServerPort), Value: "tcp"},
545+
corev1.EnvVar{Name: fmt.Sprintf("KUBERNETES_PORT_%s_TCP_PORT", homeAPIServerPort), Value: homeAPIServerPort},
546+
corev1.EnvVar{Name: fmt.Sprintf("KUBERNETES_PORT_%s_TCP_ADDR", homeAPIServerPort), Value: homeAPIServerHost},
547+
))
548+
})
549+
})
550+
446551
Describe("the RemoteTolerations function", func() {
447552
var (
448553
included, excluded corev1.Toleration

pkg/virtualKubelet/provider/provider.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,9 @@ type InitConfig struct {
7575
EnableStorage bool
7676
VirtualStorageClassName string
7777
RemoteRealStorageClassName string
78+
79+
HomeAPIServerHost string
80+
HomeAPIServerPort string
7881
}
7982

8083
// LiqoProvider implements the virtual-kubelet provider interface and stores pods in memory.
@@ -122,6 +125,8 @@ func NewLiqoProvider(ctx context.Context, cfg *InitConfig, eb record.EventBroadc
122125
podReflectorConfig := workload.PodReflectorConfig{
123126
APIServerSupport: apiServerSupport,
124127
DisableIPReflection: cfg.DisableIPReflection,
128+
HomeAPIServerHost: cfg.HomeAPIServerHost,
129+
HomeAPIServerPort: cfg.HomeAPIServerPort,
125130
}
126131

127132
reflectionManager := manager.New(localClient, remoteClient, localLiqoClient, remoteLiqoClient, cfg.InformerResyncPeriod, eb)

pkg/virtualKubelet/reflection/workload/pod.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,8 @@ type PodReflector struct {
9393
type PodReflectorConfig struct {
9494
APIServerSupport forge.APIServerSupportType
9595
DisableIPReflection bool
96+
HomeAPIServerHost string
97+
HomeAPIServerPort string
9698
}
9799

98100
// FallbackPodReflector handles the "orphan" pods outside the managed namespaces.

pkg/virtualKubelet/reflection/workload/pod_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ import (
4242
var _ = Describe("Pod Reflection Tests", func() {
4343
Describe("the NewPodReflector function", func() {
4444
It("should not return a nil reflector", func() {
45-
reflector := workload.NewPodReflector(nil, nil, nil, &workload.PodReflectorConfig{forge.APIServerSupportDisabled, false}, 0)
45+
reflector := workload.NewPodReflector(nil, nil, nil, &workload.PodReflectorConfig{forge.APIServerSupportDisabled, false, "", ""}, 0)
4646
Expect(reflector).ToNot(BeNil())
4747
Expect(reflector.Reflector).ToNot(BeNil())
4848
})
@@ -59,7 +59,7 @@ var _ = Describe("Pod Reflection Tests", func() {
5959
BeforeEach(func() {
6060
ipam := fakeipam.NewIPAMClient("192.168.200.0/24", "192.168.201.0/24", true)
6161
metricsFactory := func(string) metricsv1beta1.PodMetricsInterface { return nil }
62-
reflector := workload.NewPodReflector(nil, metricsFactory, ipam, &workload.PodReflectorConfig{forge.APIServerSupportDisabled, false}, 0)
62+
reflector := workload.NewPodReflector(nil, metricsFactory, ipam, &workload.PodReflectorConfig{forge.APIServerSupportDisabled, false, "", ""}, 0)
6363
kubernetesServiceIPGetter = reflector.KubernetesServiceIPGetter()
6464
})
6565

@@ -106,7 +106,7 @@ var _ = Describe("Pod Reflection Tests", func() {
106106
client = fake.NewSimpleClientset(&local)
107107
factory := informers.NewSharedInformerFactory(client, 10*time.Hour)
108108

109-
reflector = workload.NewPodReflector(nil, nil, nil, &workload.PodReflectorConfig{forge.APIServerSupportDisabled, false}, 0)
109+
reflector = workload.NewPodReflector(nil, nil, nil, &workload.PodReflectorConfig{forge.APIServerSupportDisabled, false, "", ""}, 0)
110110

111111
opts := options.New(client, factory.Core().V1().Pods()).
112112
WithHandlerFactory(FakeEventHandler).

pkg/virtualKubelet/reflection/workload/podns.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -319,7 +319,8 @@ func (npr *NamespacedPodReflector) ForgeShadowPod(ctx context.Context, local *co
319319

320320
// Forge the target shadowpod object.
321321
target := forge.RemoteShadowPod(local, shadow, npr.RemoteNamespace(),
322-
forge.APIServerSupportMutator(npr.config.APIServerSupport, pod.ServiceAccountName(local), saSecretRetriever, ipGetter))
322+
forge.APIServerSupportMutator(npr.config.APIServerSupport, pod.ServiceAccountName(local), saSecretRetriever,
323+
ipGetter, npr.config.HomeAPIServerHost, npr.config.HomeAPIServerPort))
323324

324325
// Check whether an error occurred during secret name retrieval.
325326
if saerr != nil {

pkg/virtualKubelet/reflection/workload/podns_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ var _ = Describe("Namespaced Pod Reflection Tests", func() {
7272

7373
broadcaster := record.NewBroadcaster()
7474
metricsFactory := func(string) metricsv1beta1.PodMetricsInterface { return nil }
75-
rfl := workload.NewPodReflector(nil, metricsFactory, ipam, &workload.PodReflectorConfig{forge.APIServerSupportTokenAPI, false}, 0)
75+
rfl := workload.NewPodReflector(nil, metricsFactory, ipam, &workload.PodReflectorConfig{forge.APIServerSupportTokenAPI, false, "", ""}, 0)
7676
rfl.Start(ctx, options.New(client, factory.Core().V1().Pods()).WithEventBroadcaster(broadcaster))
7777
reflector = rfl.NewNamespaced(options.NewNamespaced().
7878
WithLocal(LocalNamespace, client, factory).WithLiqoLocal(liqoClient, liqoFactory).

0 commit comments

Comments
 (0)