mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	network proxy with admission wh
This commit is contained in:
		@@ -176,7 +176,7 @@ func CreateServerChain(completedOptions completedServerRunOptions, stopCh <-chan
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// If additional API servers are added, they should be gated.
 | 
						// If additional API servers are added, they should be gated.
 | 
				
			||||||
	apiExtensionsConfig, err := createAPIExtensionsConfig(*kubeAPIServerConfig.GenericConfig, kubeAPIServerConfig.ExtraConfig.VersionedInformers, pluginInitializer, completedOptions.ServerRunOptions, completedOptions.MasterCount,
 | 
						apiExtensionsConfig, err := createAPIExtensionsConfig(*kubeAPIServerConfig.GenericConfig, kubeAPIServerConfig.ExtraConfig.VersionedInformers, pluginInitializer, completedOptions.ServerRunOptions, completedOptions.MasterCount,
 | 
				
			||||||
		serviceResolver, webhook.NewDefaultAuthenticationInfoResolverWrapper(proxyTransport, kubeAPIServerConfig.GenericConfig.LoopbackClientConfig))
 | 
							serviceResolver, webhook.NewDefaultAuthenticationInfoResolverWrapper(proxyTransport, kubeAPIServerConfig.GenericConfig.EgressSelector, kubeAPIServerConfig.GenericConfig.LoopbackClientConfig))
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -491,7 +491,7 @@ func buildGenericConfig(
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	serviceResolver = buildServiceResolver(s.EnableAggregatorRouting, genericConfig.LoopbackClientConfig.Host, versionedInformers)
 | 
						serviceResolver = buildServiceResolver(s.EnableAggregatorRouting, genericConfig.LoopbackClientConfig.Host, versionedInformers)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	authInfoResolverWrapper := webhook.NewDefaultAuthenticationInfoResolverWrapper(proxyTransport, genericConfig.LoopbackClientConfig)
 | 
						authInfoResolverWrapper := webhook.NewDefaultAuthenticationInfoResolverWrapper(proxyTransport, genericConfig.EgressSelector, genericConfig.LoopbackClientConfig)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	lastErr = s.Audit.ApplyTo(
 | 
						lastErr = s.Audit.ApplyTo(
 | 
				
			||||||
		genericConfig,
 | 
							genericConfig,
 | 
				
			||||||
@@ -507,7 +507,7 @@ func buildGenericConfig(
 | 
				
			|||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pluginInitializers, admissionPostStartHook, err = admissionConfig.New(proxyTransport, serviceResolver)
 | 
						pluginInitializers, admissionPostStartHook, err = admissionConfig.New(proxyTransport, genericConfig.EgressSelector, serviceResolver)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		lastErr = fmt.Errorf("failed to create admission plugin initializer: %v", err)
 | 
							lastErr = fmt.Errorf("failed to create admission plugin initializer: %v", err)
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,6 +16,7 @@ go_library(
 | 
				
			|||||||
        "//staging/src/k8s.io/apiserver/pkg/admission:go_default_library",
 | 
					        "//staging/src/k8s.io/apiserver/pkg/admission:go_default_library",
 | 
				
			||||||
        "//staging/src/k8s.io/apiserver/pkg/admission/plugin/webhook/initializer:go_default_library",
 | 
					        "//staging/src/k8s.io/apiserver/pkg/admission/plugin/webhook/initializer:go_default_library",
 | 
				
			||||||
        "//staging/src/k8s.io/apiserver/pkg/server:go_default_library",
 | 
					        "//staging/src/k8s.io/apiserver/pkg/server:go_default_library",
 | 
				
			||||||
 | 
					        "//staging/src/k8s.io/apiserver/pkg/server/egressselector:go_default_library",
 | 
				
			||||||
        "//staging/src/k8s.io/apiserver/pkg/util/webhook:go_default_library",
 | 
					        "//staging/src/k8s.io/apiserver/pkg/util/webhook:go_default_library",
 | 
				
			||||||
        "//staging/src/k8s.io/client-go/discovery/cached/memory:go_default_library",
 | 
					        "//staging/src/k8s.io/client-go/discovery/cached/memory:go_default_library",
 | 
				
			||||||
        "//staging/src/k8s.io/client-go/informers:go_default_library",
 | 
					        "//staging/src/k8s.io/client-go/informers:go_default_library",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,6 +27,7 @@ import (
 | 
				
			|||||||
	"k8s.io/apiserver/pkg/admission"
 | 
						"k8s.io/apiserver/pkg/admission"
 | 
				
			||||||
	webhookinit "k8s.io/apiserver/pkg/admission/plugin/webhook/initializer"
 | 
						webhookinit "k8s.io/apiserver/pkg/admission/plugin/webhook/initializer"
 | 
				
			||||||
	genericapiserver "k8s.io/apiserver/pkg/server"
 | 
						genericapiserver "k8s.io/apiserver/pkg/server"
 | 
				
			||||||
 | 
						egressselector "k8s.io/apiserver/pkg/server/egressselector"
 | 
				
			||||||
	"k8s.io/apiserver/pkg/util/webhook"
 | 
						"k8s.io/apiserver/pkg/util/webhook"
 | 
				
			||||||
	cacheddiscovery "k8s.io/client-go/discovery/cached/memory"
 | 
						cacheddiscovery "k8s.io/client-go/discovery/cached/memory"
 | 
				
			||||||
	externalinformers "k8s.io/client-go/informers"
 | 
						externalinformers "k8s.io/client-go/informers"
 | 
				
			||||||
@@ -44,8 +45,8 @@ type Config struct {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// New sets up the plugins and admission start hooks needed for admission
 | 
					// New sets up the plugins and admission start hooks needed for admission
 | 
				
			||||||
func (c *Config) New(proxyTransport *http.Transport, serviceResolver webhook.ServiceResolver) ([]admission.PluginInitializer, genericapiserver.PostStartHookFunc, error) {
 | 
					func (c *Config) New(proxyTransport *http.Transport, egressSelector *egressselector.EgressSelector, serviceResolver webhook.ServiceResolver) ([]admission.PluginInitializer, genericapiserver.PostStartHookFunc, error) {
 | 
				
			||||||
	webhookAuthResolverWrapper := webhook.NewDefaultAuthenticationInfoResolverWrapper(proxyTransport, c.LoopbackClientConfig)
 | 
						webhookAuthResolverWrapper := webhook.NewDefaultAuthenticationInfoResolverWrapper(proxyTransport, egressSelector, c.LoopbackClientConfig)
 | 
				
			||||||
	webhookPluginInitializer := webhookinit.NewPluginInitializer(webhookAuthResolverWrapper, serviceResolver)
 | 
						webhookPluginInitializer := webhookinit.NewPluginInitializer(webhookAuthResolverWrapper, serviceResolver)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	var cloudConfig []byte
 | 
						var cloudConfig []byte
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -104,7 +104,7 @@ func (o CustomResourceDefinitionsServerOptions) Config() (*apiserver.Config, err
 | 
				
			|||||||
		ExtraConfig: apiserver.ExtraConfig{
 | 
							ExtraConfig: apiserver.ExtraConfig{
 | 
				
			||||||
			CRDRESTOptionsGetter: NewCRDRESTOptionsGetter(*o.RecommendedOptions.Etcd),
 | 
								CRDRESTOptionsGetter: NewCRDRESTOptionsGetter(*o.RecommendedOptions.Etcd),
 | 
				
			||||||
			ServiceResolver:      &serviceResolver{serverConfig.SharedInformerFactory.Core().V1().Services().Lister()},
 | 
								ServiceResolver:      &serviceResolver{serverConfig.SharedInformerFactory.Core().V1().Services().Lister()},
 | 
				
			||||||
			AuthResolverWrapper:  webhook.NewDefaultAuthenticationInfoResolverWrapper(nil, serverConfig.LoopbackClientConfig),
 | 
								AuthResolverWrapper:  webhook.NewDefaultAuthenticationInfoResolverWrapper(nil, nil, serverConfig.LoopbackClientConfig),
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return config, nil
 | 
						return config, nil
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,6 +29,7 @@ go_library(
 | 
				
			|||||||
        "//staging/src/k8s.io/apimachinery/pkg/util/validation:go_default_library",
 | 
					        "//staging/src/k8s.io/apimachinery/pkg/util/validation:go_default_library",
 | 
				
			||||||
        "//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library",
 | 
					        "//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library",
 | 
				
			||||||
        "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
 | 
					        "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
 | 
				
			||||||
 | 
					        "//staging/src/k8s.io/apiserver/pkg/server/egressselector:go_default_library",
 | 
				
			||||||
        "//staging/src/k8s.io/client-go/rest:go_default_library",
 | 
					        "//staging/src/k8s.io/client-go/rest:go_default_library",
 | 
				
			||||||
        "//staging/src/k8s.io/client-go/tools/clientcmd:go_default_library",
 | 
					        "//staging/src/k8s.io/client-go/tools/clientcmd:go_default_library",
 | 
				
			||||||
        "//staging/src/k8s.io/client-go/tools/clientcmd/api:go_default_library",
 | 
					        "//staging/src/k8s.io/client-go/tools/clientcmd/api:go_default_library",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,6 +26,8 @@ import (
 | 
				
			|||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	corev1 "k8s.io/api/core/v1"
 | 
						corev1 "k8s.io/api/core/v1"
 | 
				
			||||||
 | 
						utilnet "k8s.io/apimachinery/pkg/util/net"
 | 
				
			||||||
 | 
						egressselector "k8s.io/apiserver/pkg/server/egressselector"
 | 
				
			||||||
	"k8s.io/client-go/rest"
 | 
						"k8s.io/client-go/rest"
 | 
				
			||||||
	"k8s.io/client-go/tools/clientcmd"
 | 
						"k8s.io/client-go/tools/clientcmd"
 | 
				
			||||||
	clientcmdapi "k8s.io/client-go/tools/clientcmd/api"
 | 
						clientcmdapi "k8s.io/client-go/tools/clientcmd/api"
 | 
				
			||||||
@@ -38,6 +40,7 @@ type AuthenticationInfoResolverWrapper func(AuthenticationInfoResolver) Authenti
 | 
				
			|||||||
// NewDefaultAuthenticationInfoResolverWrapper builds a default authn resolver wrapper
 | 
					// NewDefaultAuthenticationInfoResolverWrapper builds a default authn resolver wrapper
 | 
				
			||||||
func NewDefaultAuthenticationInfoResolverWrapper(
 | 
					func NewDefaultAuthenticationInfoResolverWrapper(
 | 
				
			||||||
	proxyTransport *http.Transport,
 | 
						proxyTransport *http.Transport,
 | 
				
			||||||
 | 
						egressSelector *egressselector.EgressSelector,
 | 
				
			||||||
	kubeapiserverClientConfig *rest.Config) AuthenticationInfoResolverWrapper {
 | 
						kubeapiserverClientConfig *rest.Config) AuthenticationInfoResolverWrapper {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	webhookAuthResolverWrapper := func(delegate AuthenticationInfoResolver) AuthenticationInfoResolver {
 | 
						webhookAuthResolverWrapper := func(delegate AuthenticationInfoResolver) AuthenticationInfoResolver {
 | 
				
			||||||
@@ -46,7 +49,23 @@ func NewDefaultAuthenticationInfoResolverWrapper(
 | 
				
			|||||||
				if hostPort == "kubernetes.default.svc:443" {
 | 
									if hostPort == "kubernetes.default.svc:443" {
 | 
				
			||||||
					return kubeapiserverClientConfig, nil
 | 
										return kubeapiserverClientConfig, nil
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				return delegate.ClientConfigFor(hostPort)
 | 
									ret, err := delegate.ClientConfigFor(hostPort)
 | 
				
			||||||
 | 
									if err != nil {
 | 
				
			||||||
 | 
										return nil, err
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									if egressSelector != nil {
 | 
				
			||||||
 | 
										networkContext := egressselector.Master.AsNetworkContext()
 | 
				
			||||||
 | 
										var egressDialer utilnet.DialFunc
 | 
				
			||||||
 | 
										egressDialer, err = egressSelector.Lookup(networkContext)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
										if err != nil {
 | 
				
			||||||
 | 
											return nil, err
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
										ret.Dial = egressDialer
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									return ret, nil
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			ClientConfigForServiceFunc: func(serviceName, serviceNamespace string, servicePort int) (*rest.Config, error) {
 | 
								ClientConfigForServiceFunc: func(serviceName, serviceNamespace string, servicePort int) (*rest.Config, error) {
 | 
				
			||||||
				if serviceName == "kubernetes" && serviceNamespace == corev1.NamespaceDefault && servicePort == 443 {
 | 
									if serviceName == "kubernetes" && serviceNamespace == corev1.NamespaceDefault && servicePort == 443 {
 | 
				
			||||||
@@ -56,10 +75,20 @@ func NewDefaultAuthenticationInfoResolverWrapper(
 | 
				
			|||||||
				if err != nil {
 | 
									if err != nil {
 | 
				
			||||||
					return nil, err
 | 
										return nil, err
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				if proxyTransport != nil && proxyTransport.DialContext != nil {
 | 
					
 | 
				
			||||||
 | 
									if egressSelector != nil {
 | 
				
			||||||
 | 
										networkContext := egressselector.Cluster.AsNetworkContext()
 | 
				
			||||||
 | 
										var egressDialer utilnet.DialFunc
 | 
				
			||||||
 | 
										egressDialer, err = egressSelector.Lookup(networkContext)
 | 
				
			||||||
 | 
										if err != nil {
 | 
				
			||||||
 | 
											return nil, err
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
										ret.Dial = egressDialer
 | 
				
			||||||
 | 
									} else if proxyTransport != nil && proxyTransport.DialContext != nil {
 | 
				
			||||||
					ret.Dial = proxyTransport.DialContext
 | 
										ret.Dial = proxyTransport.DialContext
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
				return ret, err
 | 
									return ret, nil
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user