func (s *DelegatingAuthorizationOptions) newSubjectAccessReview() (authorizationclient.SubjectAccessReviewInterface, error) { var clientConfig *rest.Config var err error if len(s.RemoteKubeConfigFile) > 0 { loadingRules := &clientcmd.ClientConfigLoadingRules{ExplicitPath: s.RemoteKubeConfigFile} loader := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(loadingRules, &clientcmd.ConfigOverrides{}) clientConfig, err = loader.ClientConfig() } else { // without the remote kubeconfig file, try to use the in-cluster config. Most addon API servers will // use this path clientConfig, err = rest.InClusterConfig() } if err != nil { return nil, err } // set high qps/burst limits since this will effectively limit API server responsiveness clientConfig.QPS = 200 clientConfig.Burst = 400 client, err := authorizationclient.NewForConfig(clientConfig) if err != nil { return nil, err } return client.SubjectAccessReviews(), nil }
// NewClient returns a new client based on the passed in config. The // codec is ignored, as the dynamic client uses it's own codec. func NewClient(conf *rest.Config) (*Client, error) { // avoid changing the original config confCopy := *conf conf = &confCopy contentConfig := ContentConfig() contentConfig.GroupVersion = conf.GroupVersion if conf.NegotiatedSerializer != nil { contentConfig.NegotiatedSerializer = conf.NegotiatedSerializer } conf.ContentConfig = contentConfig if conf.APIPath == "" { conf.APIPath = "/api" } if len(conf.UserAgent) == 0 { conf.UserAgent = rest.DefaultKubernetesUserAgent() } cl, err := rest.RESTClientFor(conf) if err != nil { return nil, err } return &Client{cl: cl}, nil }
// makeUserIdentificationFieldsConfig returns a client.Config capable of being merged using mergo for only server identification information func makeServerIdentificationConfig(info clientauth.Info) rest.Config { config := rest.Config{} config.CAFile = info.CAFile if info.Insecure != nil { config.Insecure = *info.Insecure } return config }
func setDiscoveryDefaults(config *rest.Config) error { config.APIPath = "" config.GroupVersion = nil codec := runtime.NoopEncoder{Decoder: api.Codecs.UniversalDecoder()} config.NegotiatedSerializer = serializer.NegotiatedSerializerWrapper(runtime.SerializerInfo{Serializer: codec}) if len(config.UserAgent) == 0 { config.UserAgent = rest.DefaultKubernetesUserAgent() } return nil }
// addChaosToClientConfig injects random errors into client connections if configured. func addChaosToClientGoConfig(s *options.KubeletServer, config *rest.Config) { if s.ChaosChance != 0.0 { config.WrapTransport = func(rt http.RoundTripper) http.RoundTripper { seed := chaosclient.NewSeed(1) // TODO: introduce a standard chaos package with more tunables - this is just a proof of concept // TODO: introduce random latency and stalls return chaosclient.NewChaosRoundTripper(rt, chaosclient.LogChaos, seed.P(s.ChaosChance, chaosclient.ErrSimulatedConnectionResetByPeer)) } } }
func setConfigDefaults(config *rest.Config) error { gv, err := schema.ParseGroupVersion("authorization.k8s.io/v1beta1") if err != nil { return err } // if authorization.k8s.io/v1beta1 is not enabled, return an error if !registered.IsEnabledVersion(gv) { return fmt.Errorf("authorization.k8s.io/v1beta1 is not enabled") } config.APIPath = "/apis" if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() } copyGroupVersion := gv config.GroupVersion = ©GroupVersion config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: api.Codecs} return nil }
func setConfigDefaults(config *rest.Config) error { // if certificates group is not registered, return an error g, err := registered.Group("certificates.k8s.io") if err != nil { return err } config.APIPath = "/apis" if config.UserAgent == "" { config.UserAgent = rest.DefaultKubernetesUserAgent() } // TODO: Unconditionally set the config.Version, until we fix the config. //if config.Version == "" { copyGroupVersion := g.GroupVersion config.GroupVersion = ©GroupVersion //} config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: api.Codecs} return nil }
// MergeWithConfig returns a copy of a client.Config with values from the Info. // The fields of client.Config with a corresponding field in the Info are set // with the value from the Info. func (info Info) MergeWithConfig(c rest.Config) (rest.Config, error) { var config rest.Config = c config.Username = info.User config.Password = info.Password config.CAFile = info.CAFile config.CertFile = info.CertFile config.KeyFile = info.KeyFile config.BearerToken = info.BearerToken if info.Insecure != nil { config.Insecure = *info.Insecure } return config, nil }