mirror of
				https://github.com/k3s-io/kubernetes.git
				synced 2025-11-03 23:40:03 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			88 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
/*
 | 
						|
Copyright 2015 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 apis
 | 
						|
 | 
						|
import (
 | 
						|
	"strings"
 | 
						|
 | 
						|
	"k8s.io/api/core/v1"
 | 
						|
	"k8s.io/apimachinery/pkg/util/sets"
 | 
						|
)
 | 
						|
 | 
						|
const (
 | 
						|
	// LabelOS is a label to indicate the operating system of the node.
 | 
						|
	// The OS labels are promoted to GA in 1.14. kubelet applies GA labels and stop applying the beta OS labels in Kubernetes 1.19.
 | 
						|
	LabelOS = "beta.kubernetes.io/os"
 | 
						|
	// LabelArch is a label to indicate the architecture of the node.
 | 
						|
	// The Arch labels are promoted to GA in 1.14. kubelet applies GA labels and stop applying the beta Arch labels in Kubernetes 1.19.
 | 
						|
	LabelArch = "beta.kubernetes.io/arch"
 | 
						|
)
 | 
						|
 | 
						|
var kubeletLabels = sets.NewString(
 | 
						|
	v1.LabelHostname,
 | 
						|
	v1.LabelZoneFailureDomainStable,
 | 
						|
	v1.LabelZoneRegionStable,
 | 
						|
	v1.LabelZoneFailureDomain,
 | 
						|
	v1.LabelZoneRegion,
 | 
						|
	v1.LabelInstanceType,
 | 
						|
	v1.LabelInstanceTypeStable,
 | 
						|
	v1.LabelOSStable,
 | 
						|
	v1.LabelArchStable,
 | 
						|
 | 
						|
	LabelOS,
 | 
						|
	LabelArch,
 | 
						|
)
 | 
						|
 | 
						|
var kubeletLabelNamespaces = sets.NewString(
 | 
						|
	v1.LabelNamespaceSuffixKubelet,
 | 
						|
	v1.LabelNamespaceSuffixNode,
 | 
						|
)
 | 
						|
 | 
						|
// KubeletLabels returns the list of label keys kubelets are allowed to set on their own Node objects
 | 
						|
func KubeletLabels() []string {
 | 
						|
	return kubeletLabels.List()
 | 
						|
}
 | 
						|
 | 
						|
// KubeletLabelNamespaces returns the list of label key namespaces kubelets are allowed to set on their own Node objects
 | 
						|
func KubeletLabelNamespaces() []string {
 | 
						|
	return kubeletLabelNamespaces.List()
 | 
						|
}
 | 
						|
 | 
						|
// IsKubeletLabel returns true if the label key is one that kubelets are allowed to set on their own Node object.
 | 
						|
// This checks if the key is in the KubeletLabels() list, or has a namespace in the KubeletLabelNamespaces() list.
 | 
						|
func IsKubeletLabel(key string) bool {
 | 
						|
	if kubeletLabels.Has(key) {
 | 
						|
		return true
 | 
						|
	}
 | 
						|
 | 
						|
	namespace := getLabelNamespace(key)
 | 
						|
	for allowedNamespace := range kubeletLabelNamespaces {
 | 
						|
		if namespace == allowedNamespace || strings.HasSuffix(namespace, "."+allowedNamespace) {
 | 
						|
			return true
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	return false
 | 
						|
}
 | 
						|
 | 
						|
func getLabelNamespace(key string) string {
 | 
						|
	if parts := strings.SplitN(key, "/", 2); len(parts) == 2 {
 | 
						|
		return parts[0]
 | 
						|
	}
 | 
						|
	return ""
 | 
						|
}
 |