diff --git a/pkg/nfd-client/worker/nfd-worker.go b/pkg/nfd-client/worker/nfd-worker.go index e7a6df73a..a7fdeb1f6 100644 --- a/pkg/nfd-client/worker/nfd-worker.go +++ b/pkg/nfd-client/worker/nfd-worker.go @@ -95,14 +95,15 @@ type ConfigOverrideArgs struct { type nfdWorker struct { clientcommon.NfdBaseClient - args Args - certWatch *utils.FsWatcher - configFilePath string - config *NFDConfig - grpcClient pb.LabelerClient - stop chan struct{} // channel for signaling stop - featureSources []source.FeatureSource - labelSources []source.LabelSource + args Args + certWatch *utils.FsWatcher + configFilePath string + config *NFDConfig + kubernetesNamespace string + grpcClient pb.LabelerClient + stop chan struct{} // channel for signaling stop + featureSources []source.FeatureSource + labelSources []source.LabelSource } type duration struct { @@ -119,9 +120,10 @@ func NewNfdWorker(args *Args) (clientcommon.NfdClient, error) { nfd := &nfdWorker{ NfdBaseClient: base, - args: *args, - config: &NFDConfig{}, - stop: make(chan struct{}, 1), + args: *args, + config: &NFDConfig{}, + kubernetesNamespace: utils.GetKubernetesNamespace(), + stop: make(chan struct{}, 1), } if args.ConfigFile != "" { diff --git a/pkg/utils/kubernetes.go b/pkg/utils/kubernetes.go new file mode 100644 index 000000000..4dd6ba09f --- /dev/null +++ b/pkg/utils/kubernetes.go @@ -0,0 +1,35 @@ +/* +Copyright 2022 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package utils + +import ( + "os" + "strings" +) + +// GetKubernetesNamespace returns the kubernetes namespace we're running under, +// or an empty string if the namespace cannot be determined. +func GetKubernetesNamespace() string { + const kubernetesNamespaceFilePath = "/var/run/secrets/kubernetes.io/serviceaccount/namespace" + if _, err := os.Stat(kubernetesNamespaceFilePath); err == nil { + data, err := os.ReadFile(kubernetesNamespaceFilePath) + if err == nil { + return strings.TrimSpace(string(data)) + } + } + return os.Getenv("KUBERNETES_NAMESPACE") +}