首页 > 解决方案 > 如何在没有 kubeconfig 文件的情况下使用 golang api 对 kubernetes 进行外部认证?

问题描述

虽然用于集群外身份验证的 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)

标签: gokubernetes

解决方案


rest.Config传递给客户端构造函数的NewFromConfig结构允许您直接指定不记名令牌和/或客户端证书/密钥数据。


推荐阅读