Не удается переопределить конфигурацию Kubernetes в клиенте Kubernetes Go - PullRequest
5 голосов
/ 13 января 2020

Я хочу использовать клиент Kubernetes Go для выполнения различных действий в кластере. Я загружаю свой локальный kubeconfig, который содержит несколько кластеров и контекстов. Контекст по умолчанию - prod, и одно из значений конфигурации, которое я хочу переопределить, - CurrentContext

    clientConfig := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(
        &clientcmd.ClientConfigLoadingRules{ExplicitPath: "/Users/me/.kube/config"},
        &clientcmd.ConfigOverrides{
            CurrentContext: "stage",
        })

    rawConfig, _ := clientConfig.RawConfig()
    log.Printf(rawConfig.CurrentContext) // outputs "prod" instead of "stage"

Когда я проверяю RawConfig(), текущий контекст по-прежнему «prod» вместо «stage» , Почему переопределение конфигурации не работает?

Также как переопределение для AuthInfo et c. Работа? Переопределение принимает только один AuthInfo, тогда как конфигурация содержит карту AuthInfo et c.

Проблема, связанная с GitHub https://github.com/kubernetes/client-go/issues/735

1 Ответ

3 голосов
/ 22 января 2020

Почему переопределение конфигурации не работает?

в соответствии с

https://github.com/kubernetes/client-go/blob/a432bd9ba7da427ae0a38a6889d72136bce4c4ea/tools/clientcmd/client_config.go#L57 -L58

// ClientConfig is used to make it easy to get an api server client
type ClientConfig interface {
    // RawConfig returns the merged result of all overrides
    RawConfig() (clientcmdapi.Config, error)

RawConfig должен вернуть конфигурацию с переопределениями, но на самом деле это не

https://github.com/kubernetes/client-go/blob/a432bd9ba7da427ae0a38a6889d72136bce4c4ea/tools/clientcmd/client_config.go#L122 -L124

func (config *DirectClientConfig) RawConfig() (clientcmdapi.Config, error) {
    return config.config, nil
}

, просто вернуть конфигурацию без переопределений. Вы можете увидеть возможное решение здесь в моем патче

https://github.com/vvelikodny/kubernetes-client-go/pull/1/files

Также, как работает переопределение для AuthInfo et c. Работа? Переопределение принимает только один AuthInfo, тогда как конфигурация содержит карту AuthInfo et c.

, переопределяет только AuthInfo с ключом имени пользователя, который представлен в context.AuthInfo (строка).

https://github.com/kubernetes/client-go/blob/a432bd9ba7da427ae0a38a6889d72136bce4c4ea/tools/clientcmd/client_config.go#L424 -L437

https://github.com/kubernetes/client-go/blob/a432bd9ba7da427ae0a38a6889d72136bce4c4ea/tools/clientcmd/client_config.go#L388 -L394

// getAuthInfoName returns a string containing the current authinfo name for the current context,
// and a boolean indicating  whether the default authInfo name is overwritten by a user-set flag, or
// left as its default value
func (config *DirectClientConfig) getAuthInfoName() (string, bool) {
    if len(config.overrides.Context.AuthInfo) != 0 {
        return config.overrides.Context.AuthInfo, true
    }
    context, _ := config.getContext()
    return context.AuthInfo, false
}
...