Skip to content

Commit 2dd0cd9

Browse files
authored
Merge pull request #2921 from Colstuwjx/common-flag-env-metadata-whitelist
Common flag env metadata whitelist
2 parents 109af09 + 058347d commit 2dd0cd9

File tree

22 files changed

+100
-76
lines changed

22 files changed

+100
-76
lines changed

build/integration.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ function start {
2727
set +e # We want to handle errors if cAdvisor crashes.
2828
echo ">> starting cAdvisor locally"
2929
# This cpuset, percpu, memory, disk, diskIO, network, perf_event metrics should be enabled.
30-
GORACE="halt_on_error=1" ./cadvisor --enable_metrics="cpuset,percpu,memory,disk,diskIO,network,perf_event" --docker_env_metadata_whitelist=TEST_VAR --v=6 --logtostderr $CADVISOR_ARGS &> "$log_file"
30+
GORACE="halt_on_error=1" ./cadvisor --enable_metrics="cpuset,percpu,memory,disk,diskIO,network,perf_event" --env_metadata_whitelist=TEST_VAR --v=6 --logtostderr $CADVISOR_ARGS &> "$log_file"
3131
if [ $? != 0 ]; then
3232
echo "!! cAdvisor exited unexpectedly with Exit $?"
3333
kill $TEST_PID # cAdvisor crashed: abort testing.

cmd/cadvisor.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ var collectorKey = flag.String("collector_key", "", "Key for the collector's cer
6565
var storeContainerLabels = flag.Bool("store_container_labels", true, "convert container labels and environment variables into labels on prometheus metrics for each container. If flag set to false, then only metrics exported are container name, first alias, and image name")
6666
var whitelistedContainerLabels = flag.String("whitelisted_container_labels", "", "comma separated list of container labels to be converted to labels on prometheus metrics for each container. store_container_labels must be set to false for this to take effect.")
6767

68+
var envMetadataWhiteList = flag.String("env_metadata_whitelist", "", "a comma-separated list of environment variable keys matched with specified prefix that needs to be collected for containers, only support containerd and docker runtime for now.")
69+
6870
var urlBasePrefix = flag.String("url_base_prefix", "", "prefix path that will be prepended to all paths to support some reverse proxies")
6971

7072
var rawCgroupPrefixWhiteList = flag.String("raw_cgroup_prefix_whitelist", "", "A comma-separated list of cgroup path prefix that needs to be collected even when -docker_only is specified")
@@ -129,7 +131,7 @@ func main() {
129131

130132
collectorHttpClient := createCollectorHttpClient(*collectorCert, *collectorKey)
131133

132-
resourceManager, err := manager.New(memoryStorage, sysFs, manager.HousekeepingConfigFlags, includedMetrics, &collectorHttpClient, strings.Split(*rawCgroupPrefixWhiteList, ","), *perfEvents)
134+
resourceManager, err := manager.New(memoryStorage, sysFs, manager.HousekeepingConfigFlags, includedMetrics, &collectorHttpClient, strings.Split(*rawCgroupPrefixWhiteList, ","), strings.Split(*envMetadataWhiteList, ","), *perfEvents)
133135
if err != nil {
134136
klog.Fatalf("Failed to create a manager: %s", err)
135137
}

cmd/internal/container/mesos/factory.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ func (f *mesosFactory) String() string {
5959
return MesosNamespace
6060
}
6161

62-
func (f *mesosFactory) NewContainerHandler(name string, inHostNamespace bool) (container.ContainerHandler, error) {
62+
func (f *mesosFactory) NewContainerHandler(name string, metadataEnvAllowList []string, inHostNamespace bool) (container.ContainerHandler, error) {
6363
client, err := Client()
6464
if err != nil {
6565
return nil, err
@@ -72,6 +72,7 @@ func (f *mesosFactory) NewContainerHandler(name string, inHostNamespace bool) (c
7272
f.fsInfo,
7373
f.includedMetrics,
7474
inHostNamespace,
75+
metadataEnvAllowList,
7576
client,
7677
)
7778
}

cmd/internal/container/mesos/handler.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ func newMesosContainerHandler(
5757
fsInfo fs.FsInfo,
5858
includedMetrics container.MetricSet,
5959
inHostNamespace bool,
60+
metadataEnvAllowList []string,
6061
client mesosAgentClient,
6162
) (container.ContainerHandler, error) {
6263
cgroupPaths := common.MakeCgroupPaths(cgroupSubsystems.MountPoints, name)

cmd/internal/container/mesos/handler_test.go

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,14 @@ func PopulateContainer() *mContainer {
3737
func TestContainerReference(t *testing.T) {
3838
as := assert.New(t)
3939
type testCase struct {
40-
client mesosAgentClient
41-
name string
42-
machineInfoFactory info.MachineInfoFactory
43-
fsInfo fs.FsInfo
44-
cgroupSubsystems *containerlibcontainer.CgroupSubsystems
45-
inHostNamespace bool
46-
includedMetrics container.MetricSet
40+
client mesosAgentClient
41+
name string
42+
machineInfoFactory info.MachineInfoFactory
43+
fsInfo fs.FsInfo
44+
cgroupSubsystems *containerlibcontainer.CgroupSubsystems
45+
inHostNamespace bool
46+
metadataEnvAllowList []string
47+
includedMetrics container.MetricSet
4748

4849
hasErr bool
4950
errContains string
@@ -57,6 +58,7 @@ func TestContainerReference(t *testing.T) {
5758
nil,
5859
&containerlibcontainer.CgroupSubsystems{},
5960
false,
61+
[]string{},
6062
nil,
6163

6264
true,
@@ -70,6 +72,7 @@ func TestContainerReference(t *testing.T) {
7072
nil,
7173
&containerlibcontainer.CgroupSubsystems{},
7274
false,
75+
[]string{},
7376
nil,
7477

7578
true,
@@ -83,6 +86,7 @@ func TestContainerReference(t *testing.T) {
8386
nil,
8487
&containerlibcontainer.CgroupSubsystems{},
8588
false,
89+
[]string{},
8690
nil,
8791

8892
false,
@@ -95,7 +99,7 @@ func TestContainerReference(t *testing.T) {
9599
},
96100
},
97101
} {
98-
handler, err := newMesosContainerHandler(ts.name, ts.cgroupSubsystems, ts.machineInfoFactory, ts.fsInfo, ts.includedMetrics, ts.inHostNamespace, ts.client)
102+
handler, err := newMesosContainerHandler(ts.name, ts.cgroupSubsystems, ts.machineInfoFactory, ts.fsInfo, ts.includedMetrics, ts.inHostNamespace, ts.metadataEnvAllowList, ts.client)
99103
if ts.hasErr {
100104
as.NotNil(err)
101105
if ts.errContains != "" {

container/containerd/factory.go

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,15 @@ import (
3434
var ArgContainerdEndpoint = flag.String("containerd", "/run/containerd/containerd.sock", "containerd endpoint")
3535
var ArgContainerdNamespace = flag.String("containerd-namespace", "k8s.io", "containerd namespace")
3636

37+
var containerdEnvMetadataWhiteList = flag.String("containerd_env_metadata_whitelist", "", "DEPRECATED: this flag will be removed, please use `env_metadata_whitelist`. A comma-separated list of environment variable keys matched with specified prefix that needs to be collected for containerd containers")
38+
3739
// The namespace under which containerd aliases are unique.
3840
const k8sContainerdNamespace = "containerd"
3941

4042
// Regexp that identifies containerd cgroups, containers started with
4143
// --cgroup-parent have another prefix than 'containerd'
4244
var containerdCgroupRegexp = regexp.MustCompile(`([a-z0-9]{64})`)
4345

44-
var containerdEnvWhitelist = flag.String("containerd_env_metadata_whitelist", "", "a comma-separated list of environment variable keys matched with specified prefix that needs to be collected for containerd containers")
45-
4646
type containerdFactory struct {
4747
machineInfoFactory info.MachineInfoFactory
4848
client ContainerdClient
@@ -58,13 +58,18 @@ func (f *containerdFactory) String() string {
5858
return k8sContainerdNamespace
5959
}
6060

61-
func (f *containerdFactory) NewContainerHandler(name string, inHostNamespace bool) (handler container.ContainerHandler, err error) {
61+
func (f *containerdFactory) NewContainerHandler(name string, metadataEnvAllowList []string, inHostNamespace bool) (handler container.ContainerHandler, err error) {
6262
client, err := Client(*ArgContainerdEndpoint, *ArgContainerdNamespace)
6363
if err != nil {
6464
return
6565
}
6666

67-
metadataEnvs := strings.Split(*containerdEnvWhitelist, ",")
67+
containerdMetadataEnvAllowList := strings.Split(*containerdEnvMetadataWhiteList, ",")
68+
69+
// prefer using the unified metadataEnvAllowList
70+
if len(metadataEnvAllowList) != 0 {
71+
containerdMetadataEnvAllowList = metadataEnvAllowList
72+
}
6873

6974
return newContainerdContainerHandler(
7075
client,
@@ -73,7 +78,7 @@ func (f *containerdFactory) NewContainerHandler(name string, inHostNamespace boo
7378
f.fsInfo,
7479
&f.cgroupSubsystems,
7580
inHostNamespace,
76-
metadataEnvs,
81+
containerdMetadataEnvAllowList,
7782
f.includedMetrics,
7883
)
7984
}

container/containerd/handler.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ func newContainerdContainerHandler(
6060
fsInfo fs.FsInfo,
6161
cgroupSubsystems *containerlibcontainer.CgroupSubsystems,
6262
inHostNamespace bool,
63-
metadataEnvs []string,
63+
metadataEnvAllowList []string,
6464
includedMetrics container.MetricSet,
6565
) (container.ContainerHandler, error) {
6666
// Create the cgroup paths.
@@ -134,9 +134,9 @@ func newContainerdContainerHandler(
134134
// Add the name and bare ID as aliases of the container.
135135
handler.image = cntr.Image
136136

137-
for _, exposedEnv := range metadataEnvs {
137+
for _, exposedEnv := range metadataEnvAllowList {
138138
if exposedEnv == "" {
139-
// if no containerdEnvWhitelist provided, len(metadataEnvs) == 1, metadataEnvs[0] == ""
139+
// if no containerdEnvWhitelist provided, len(metadataEnvAllowList) == 1, metadataEnvAllowList[0] == ""
140140
continue
141141
}
142142

container/containerd/handler_test.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,14 @@ func (m *mockedMachineInfo) GetVersionInfo() (*info.VersionInfo, error) {
4545
func TestHandler(t *testing.T) {
4646
as := assert.New(t)
4747
type testCase struct {
48-
client ContainerdClient
49-
name string
50-
machineInfoFactory info.MachineInfoFactory
51-
fsInfo fs.FsInfo
52-
cgroupSubsystems *containerlibcontainer.CgroupSubsystems
53-
inHostNamespace bool
54-
metadataEnvs []string
55-
includedMetrics container.MetricSet
48+
client ContainerdClient
49+
name string
50+
machineInfoFactory info.MachineInfoFactory
51+
fsInfo fs.FsInfo
52+
cgroupSubsystems *containerlibcontainer.CgroupSubsystems
53+
inHostNamespace bool
54+
metadataEnvAllowList []string
55+
includedMetrics container.MetricSet
5656

5757
hasErr bool
5858
errContains string
@@ -121,7 +121,7 @@ func TestHandler(t *testing.T) {
121121
map[string]string{"TEST_REGION": "FRA", "TEST_ZONE": "A"},
122122
},
123123
} {
124-
handler, err := newContainerdContainerHandler(ts.client, ts.name, ts.machineInfoFactory, ts.fsInfo, ts.cgroupSubsystems, ts.inHostNamespace, ts.metadataEnvs, ts.includedMetrics)
124+
handler, err := newContainerdContainerHandler(ts.client, ts.name, ts.machineInfoFactory, ts.fsInfo, ts.cgroupSubsystems, ts.inHostNamespace, ts.metadataEnvAllowList, ts.includedMetrics)
125125
if ts.hasErr {
126126
as.NotNil(err)
127127
if ts.errContains != "" {

container/crio/factory.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,11 @@ func (f *crioFactory) String() string {
6464
return CrioNamespace
6565
}
6666

67-
func (f *crioFactory) NewContainerHandler(name string, inHostNamespace bool) (handler container.ContainerHandler, err error) {
67+
func (f *crioFactory) NewContainerHandler(name string, metadataEnvAllowList []string, inHostNamespace bool) (handler container.ContainerHandler, err error) {
6868
client, err := Client()
6969
if err != nil {
7070
return
7171
}
72-
// TODO are there any env vars we need to white list, if so, do it here...
73-
metadataEnvs := []string{}
7472
handler, err = newCrioContainerHandler(
7573
client,
7674
name,
@@ -80,7 +78,7 @@ func (f *crioFactory) NewContainerHandler(name string, inHostNamespace bool) (ha
8078
f.storageDir,
8179
&f.cgroupSubsystems,
8280
inHostNamespace,
83-
metadataEnvs,
81+
metadataEnvAllowList,
8482
f.includedMetrics,
8583
)
8684
return

container/crio/handler.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ func newCrioContainerHandler(
8585
storageDir string,
8686
cgroupSubsystems *containerlibcontainer.CgroupSubsystems,
8787
inHostNamespace bool,
88-
metadataEnvs []string,
88+
metadataEnvAllowList []string,
8989
includedMetrics container.MetricSet,
9090
) (container.ContainerHandler, error) {
9191
// Create the cgroup paths.
@@ -186,7 +186,7 @@ func newCrioContainerHandler(
186186
handler.fsHandler = common.NewFsHandler(common.DefaultPeriod, rootfsStorageDir, storageLogDir, fsInfo)
187187
}
188188
// TODO for env vars we wanted to show from container.Config.Env from whitelist
189-
//for _, exposedEnv := range metadataEnvs {
189+
//for _, exposedEnv := range metadataEnvAllowList {
190190
//klog.V(4).Infof("TODO env whitelist: %v", exposedEnv)
191191
//}
192192

0 commit comments

Comments
 (0)