mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	Merge pull request #86137 from robscott/endpointslice-proxy-feature
Creating new EndpointSliceProxying feature gate for kube-proxy, enabling EndpointSlice feature gate by default
This commit is contained in:
		@@ -313,7 +313,7 @@ func newProxyServer(
 | 
				
			|||||||
		OOMScoreAdj:            config.OOMScoreAdj,
 | 
							OOMScoreAdj:            config.OOMScoreAdj,
 | 
				
			||||||
		ConfigSyncPeriod:       config.ConfigSyncPeriod.Duration,
 | 
							ConfigSyncPeriod:       config.ConfigSyncPeriod.Duration,
 | 
				
			||||||
		HealthzServer:          healthzServer,
 | 
							HealthzServer:          healthzServer,
 | 
				
			||||||
		UseEndpointSlices:      utilfeature.DefaultFeatureGate.Enabled(features.EndpointSlice),
 | 
							UseEndpointSlices:      utilfeature.DefaultFeatureGate.Enabled(features.EndpointSliceProxying),
 | 
				
			||||||
	}, nil
 | 
						}, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -487,6 +487,12 @@ const (
 | 
				
			|||||||
	// Enable Endpoint Slices for more scalable Service endpoints.
 | 
						// Enable Endpoint Slices for more scalable Service endpoints.
 | 
				
			||||||
	EndpointSlice featuregate.Feature = "EndpointSlice"
 | 
						EndpointSlice featuregate.Feature = "EndpointSlice"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// owner: @robscott @freehan
 | 
				
			||||||
 | 
						// alpha: v1.18
 | 
				
			||||||
 | 
						//
 | 
				
			||||||
 | 
						// Enable Endpoint Slice consumption by kube-proxy for improved scalability.
 | 
				
			||||||
 | 
						EndpointSliceProxying featuregate.Feature = "EndpointSliceProxying"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// owner: @Huang-Wei
 | 
						// owner: @Huang-Wei
 | 
				
			||||||
	// alpha: v1.16
 | 
						// alpha: v1.16
 | 
				
			||||||
	//
 | 
						//
 | 
				
			||||||
@@ -594,7 +600,8 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS
 | 
				
			|||||||
	VolumePVCDataSource:                            {Default: true, PreRelease: featuregate.Beta},
 | 
						VolumePVCDataSource:                            {Default: true, PreRelease: featuregate.Beta},
 | 
				
			||||||
	PodOverhead:                                    {Default: false, PreRelease: featuregate.Alpha},
 | 
						PodOverhead:                                    {Default: false, PreRelease: featuregate.Alpha},
 | 
				
			||||||
	IPv6DualStack:                                  {Default: false, PreRelease: featuregate.Alpha},
 | 
						IPv6DualStack:                                  {Default: false, PreRelease: featuregate.Alpha},
 | 
				
			||||||
	EndpointSlice:                                  {Default: false, PreRelease: featuregate.Beta},
 | 
						EndpointSlice:                                  {Default: true, PreRelease: featuregate.Beta},
 | 
				
			||||||
 | 
						EndpointSliceProxying:                          {Default: false, PreRelease: featuregate.Alpha},
 | 
				
			||||||
	EvenPodsSpread:                                 {Default: false, PreRelease: featuregate.Alpha},
 | 
						EvenPodsSpread:                                 {Default: false, PreRelease: featuregate.Alpha},
 | 
				
			||||||
	StartupProbe:                                   {Default: true, PreRelease: featuregate.Beta},
 | 
						StartupProbe:                                   {Default: true, PreRelease: featuregate.Beta},
 | 
				
			||||||
	AllowInsecureBackendProxy:                      {Default: true, PreRelease: featuregate.Beta},
 | 
						AllowInsecureBackendProxy:                      {Default: true, PreRelease: featuregate.Beta},
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -291,7 +291,7 @@ func NewProxier(ipt utiliptables.Interface,
 | 
				
			|||||||
		return nil, fmt.Errorf("clusterCIDR %s has incorrect IP version: expect isIPv6=%t", clusterCIDR, ipt.IsIpv6())
 | 
							return nil, fmt.Errorf("clusterCIDR %s has incorrect IP version: expect isIPv6=%t", clusterCIDR, ipt.IsIpv6())
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	endpointSlicesEnabled := utilfeature.DefaultFeatureGate.Enabled(features.EndpointSlice)
 | 
						endpointSlicesEnabled := utilfeature.DefaultFeatureGate.Enabled(features.EndpointSliceProxying)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	serviceHealthServer := healthcheck.NewServiceHealthServer(hostname, recorder)
 | 
						serviceHealthServer := healthcheck.NewServiceHealthServer(hostname, recorder)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -553,7 +553,7 @@ func (proxier *Proxier) OnServiceDelete(service *v1.Service) {
 | 
				
			|||||||
func (proxier *Proxier) OnServiceSynced() {
 | 
					func (proxier *Proxier) OnServiceSynced() {
 | 
				
			||||||
	proxier.mu.Lock()
 | 
						proxier.mu.Lock()
 | 
				
			||||||
	proxier.servicesSynced = true
 | 
						proxier.servicesSynced = true
 | 
				
			||||||
	if utilfeature.DefaultFeatureGate.Enabled(features.EndpointSlice) {
 | 
						if utilfeature.DefaultFeatureGate.Enabled(features.EndpointSliceProxying) {
 | 
				
			||||||
		proxier.setInitialized(proxier.endpointSlicesSynced)
 | 
							proxier.setInitialized(proxier.endpointSlicesSynced)
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		proxier.setInitialized(proxier.endpointsSynced)
 | 
							proxier.setInitialized(proxier.endpointsSynced)
 | 
				
			||||||
@@ -965,7 +965,7 @@ func (proxier *Proxier) syncProxyRules() {
 | 
				
			|||||||
		// 2. ServiceTopology is not enabled.
 | 
							// 2. ServiceTopology is not enabled.
 | 
				
			||||||
		// 3. EndpointSlice is not enabled (service topology depends on endpoint slice
 | 
							// 3. EndpointSlice is not enabled (service topology depends on endpoint slice
 | 
				
			||||||
		// to get topology information).
 | 
							// to get topology information).
 | 
				
			||||||
		if !svcInfo.OnlyNodeLocalEndpoints() && utilfeature.DefaultFeatureGate.Enabled(features.ServiceTopology) && utilfeature.DefaultFeatureGate.Enabled(features.EndpointSlice) {
 | 
							if !svcInfo.OnlyNodeLocalEndpoints() && utilfeature.DefaultFeatureGate.Enabled(features.ServiceTopology) && utilfeature.DefaultFeatureGate.Enabled(features.EndpointSliceProxying) {
 | 
				
			||||||
			allEndpoints = proxy.FilterTopologyEndpoint(proxier.nodeLabels, svcInfo.TopologyKeys(), allEndpoints)
 | 
								allEndpoints = proxy.FilterTopologyEndpoint(proxier.nodeLabels, svcInfo.TopologyKeys(), allEndpoints)
 | 
				
			||||||
			hasEndpoints = len(allEndpoints) > 0
 | 
								hasEndpoints = len(allEndpoints) > 0
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -436,7 +436,7 @@ func NewProxier(ipt utiliptables.Interface,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	serviceHealthServer := healthcheck.NewServiceHealthServer(hostname, recorder)
 | 
						serviceHealthServer := healthcheck.NewServiceHealthServer(hostname, recorder)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	endpointSlicesEnabled := utilfeature.DefaultFeatureGate.Enabled(features.EndpointSlice)
 | 
						endpointSlicesEnabled := utilfeature.DefaultFeatureGate.Enabled(features.EndpointSliceProxying)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	proxier := &Proxier{
 | 
						proxier := &Proxier{
 | 
				
			||||||
		portsMap:              make(map[utilproxy.LocalPort]utilproxy.Closeable),
 | 
							portsMap:              make(map[utilproxy.LocalPort]utilproxy.Closeable),
 | 
				
			||||||
@@ -855,7 +855,7 @@ func (proxier *Proxier) OnServiceDelete(service *v1.Service) {
 | 
				
			|||||||
func (proxier *Proxier) OnServiceSynced() {
 | 
					func (proxier *Proxier) OnServiceSynced() {
 | 
				
			||||||
	proxier.mu.Lock()
 | 
						proxier.mu.Lock()
 | 
				
			||||||
	proxier.servicesSynced = true
 | 
						proxier.servicesSynced = true
 | 
				
			||||||
	if utilfeature.DefaultFeatureGate.Enabled(features.EndpointSlice) {
 | 
						if utilfeature.DefaultFeatureGate.Enabled(features.EndpointSliceProxying) {
 | 
				
			||||||
		proxier.setInitialized(proxier.endpointSlicesSynced)
 | 
							proxier.setInitialized(proxier.endpointSlicesSynced)
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		proxier.setInitialized(proxier.endpointsSynced)
 | 
							proxier.setInitialized(proxier.endpointsSynced)
 | 
				
			||||||
@@ -1963,7 +1963,7 @@ func (proxier *Proxier) syncEndpoint(svcPortName proxy.ServicePortName, onlyNode
 | 
				
			|||||||
	// 2. ServiceTopology is not enabled.
 | 
						// 2. ServiceTopology is not enabled.
 | 
				
			||||||
	// 3. EndpointSlice is not enabled (service topology depends on endpoint slice
 | 
						// 3. EndpointSlice is not enabled (service topology depends on endpoint slice
 | 
				
			||||||
	// to get topology information).
 | 
						// to get topology information).
 | 
				
			||||||
	if !onlyNodeLocalEndpoints && utilfeature.DefaultFeatureGate.Enabled(features.ServiceTopology) && utilfeature.DefaultFeatureGate.Enabled(features.EndpointSlice) {
 | 
						if !onlyNodeLocalEndpoints && utilfeature.DefaultFeatureGate.Enabled(features.ServiceTopology) && utilfeature.DefaultFeatureGate.Enabled(features.EndpointSliceProxying) {
 | 
				
			||||||
		endpoints = proxy.FilterTopologyEndpoint(proxier.nodeLabels, proxier.serviceMap[svcPortName].TopologyKeys(), endpoints)
 | 
							endpoints = proxy.FilterTopologyEndpoint(proxier.nodeLabels, proxier.serviceMap[svcPortName].TopologyKeys(), endpoints)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1051,6 +1051,13 @@ items:
 | 
				
			|||||||
    - create
 | 
					    - create
 | 
				
			||||||
    - patch
 | 
					    - patch
 | 
				
			||||||
    - update
 | 
					    - update
 | 
				
			||||||
 | 
					  - apiGroups:
 | 
				
			||||||
 | 
					    - discovery.k8s.io
 | 
				
			||||||
 | 
					    resources:
 | 
				
			||||||
 | 
					    - endpointslices
 | 
				
			||||||
 | 
					    verbs:
 | 
				
			||||||
 | 
					    - list
 | 
				
			||||||
 | 
					    - watch
 | 
				
			||||||
- apiVersion: rbac.authorization.k8s.io/v1
 | 
					- apiVersion: rbac.authorization.k8s.io/v1
 | 
				
			||||||
  kind: ClusterRole
 | 
					  kind: ClusterRole
 | 
				
			||||||
  metadata:
 | 
					  metadata:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -136,6 +136,23 @@ items:
 | 
				
			|||||||
  - kind: ServiceAccount
 | 
					  - kind: ServiceAccount
 | 
				
			||||||
    name: endpoint-controller
 | 
					    name: endpoint-controller
 | 
				
			||||||
    namespace: kube-system
 | 
					    namespace: kube-system
 | 
				
			||||||
 | 
					- apiVersion: rbac.authorization.k8s.io/v1
 | 
				
			||||||
 | 
					  kind: ClusterRoleBinding
 | 
				
			||||||
 | 
					  metadata:
 | 
				
			||||||
 | 
					    annotations:
 | 
				
			||||||
 | 
					      rbac.authorization.kubernetes.io/autoupdate: "true"
 | 
				
			||||||
 | 
					    creationTimestamp: null
 | 
				
			||||||
 | 
					    labels:
 | 
				
			||||||
 | 
					      kubernetes.io/bootstrapping: rbac-defaults
 | 
				
			||||||
 | 
					    name: system:controller:endpointslice-controller
 | 
				
			||||||
 | 
					  roleRef:
 | 
				
			||||||
 | 
					    apiGroup: rbac.authorization.k8s.io
 | 
				
			||||||
 | 
					    kind: ClusterRole
 | 
				
			||||||
 | 
					    name: system:controller:endpointslice-controller
 | 
				
			||||||
 | 
					  subjects:
 | 
				
			||||||
 | 
					  - kind: ServiceAccount
 | 
				
			||||||
 | 
					    name: endpointslice-controller
 | 
				
			||||||
 | 
					    namespace: kube-system
 | 
				
			||||||
- apiVersion: rbac.authorization.k8s.io/v1
 | 
					- apiVersion: rbac.authorization.k8s.io/v1
 | 
				
			||||||
  kind: ClusterRoleBinding
 | 
					  kind: ClusterRoleBinding
 | 
				
			||||||
  metadata:
 | 
					  metadata:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -455,6 +455,45 @@ items:
 | 
				
			|||||||
    - create
 | 
					    - create
 | 
				
			||||||
    - patch
 | 
					    - patch
 | 
				
			||||||
    - update
 | 
					    - update
 | 
				
			||||||
 | 
					- apiVersion: rbac.authorization.k8s.io/v1
 | 
				
			||||||
 | 
					  kind: ClusterRole
 | 
				
			||||||
 | 
					  metadata:
 | 
				
			||||||
 | 
					    annotations:
 | 
				
			||||||
 | 
					      rbac.authorization.kubernetes.io/autoupdate: "true"
 | 
				
			||||||
 | 
					    creationTimestamp: null
 | 
				
			||||||
 | 
					    labels:
 | 
				
			||||||
 | 
					      kubernetes.io/bootstrapping: rbac-defaults
 | 
				
			||||||
 | 
					    name: system:controller:endpointslice-controller
 | 
				
			||||||
 | 
					  rules:
 | 
				
			||||||
 | 
					  - apiGroups:
 | 
				
			||||||
 | 
					    - ""
 | 
				
			||||||
 | 
					    resources:
 | 
				
			||||||
 | 
					    - nodes
 | 
				
			||||||
 | 
					    - pods
 | 
				
			||||||
 | 
					    - services
 | 
				
			||||||
 | 
					    verbs:
 | 
				
			||||||
 | 
					    - get
 | 
				
			||||||
 | 
					    - list
 | 
				
			||||||
 | 
					    - watch
 | 
				
			||||||
 | 
					  - apiGroups:
 | 
				
			||||||
 | 
					    - discovery.k8s.io
 | 
				
			||||||
 | 
					    resources:
 | 
				
			||||||
 | 
					    - endpointslices
 | 
				
			||||||
 | 
					    verbs:
 | 
				
			||||||
 | 
					    - create
 | 
				
			||||||
 | 
					    - delete
 | 
				
			||||||
 | 
					    - get
 | 
				
			||||||
 | 
					    - list
 | 
				
			||||||
 | 
					    - update
 | 
				
			||||||
 | 
					  - apiGroups:
 | 
				
			||||||
 | 
					    - ""
 | 
				
			||||||
 | 
					    - events.k8s.io
 | 
				
			||||||
 | 
					    resources:
 | 
				
			||||||
 | 
					    - events
 | 
				
			||||||
 | 
					    verbs:
 | 
				
			||||||
 | 
					    - create
 | 
				
			||||||
 | 
					    - patch
 | 
				
			||||||
 | 
					    - update
 | 
				
			||||||
- apiVersion: rbac.authorization.k8s.io/v1
 | 
					- apiVersion: rbac.authorization.k8s.io/v1
 | 
				
			||||||
  kind: ClusterRole
 | 
					  kind: ClusterRole
 | 
				
			||||||
  metadata:
 | 
					  metadata:
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user