Как использовать golang api для внешней аутентификации в kubernetes без файла kubeconfig? - PullRequest
0 голосов
/ 11 сентября 2018

Хотя пример kubernetes golang api для аутентификации вне кластера работает нормально , и создание учетной записи службы и экспорт токена-носителя отлично работает , но писать глупо куски во временный файл только, чтобы сказать API, чтобы прочитать его. Есть ли способ API передать эти фрагменты как объект, а не записать в файл?

    clusterData := map[string]string{
        "BEARER_TOKEN":       bearerToken,
        "CA_DATA":            clusterCA,
        "ENDPOINT":           clusterUrl,
    }

    const kubeConfigTmpl = `
apiVersion: v1
clusters:
    - cluster:
    certificate-authority-data: {{.CA_DATA}}
server: {{.HOST_IP_ADDRESS}}
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    namespace: default
    user: lamdba-serviceaccount-default-kubernetes
  name: lamdba-serviceaccount-default-kubernetes
current-context: lamdba-serviceaccount-default-kubernetes
kind: Config
preferences: {}
users:
- name: lamdba-serviceaccount-default-kubernetes
  user:
    token: {{.BEARER_TOKEN}}
`
    t := template.Must(template.New("registration").Parse(kubeConfigTmpl))
    buf := &bytes.Buffer{}
    if err := t.Execute(buf, clusterData); err != nil {
        panic(err)
    }
    registrationPayload := buf.String()

    d1 := []byte(registrationPayload)
    err := ioutil.WriteFile("/tmp/config", d1, 0644)

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Глядя на исходный код, это должно работать:

// error handling omitted for brevity
cc, _ := clientcmd.NewClientConfigFromBytes([]byte(d1))
config, _ := cc.ClientConfig()
clientset, _ := kubernetes.NewForConfig(config)
0 голосов
/ 12 сентября 2018

Структура rest.Config, передаваемая в конструкторы клиента NewFromConfig, позволяет напрямую указывать токены носителя и / или данные сертификата / ключа клиента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...