go - 如何在没有 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)
解决方案
rest.Config
传递给客户端构造函数的NewFromConfig
结构允许您直接指定不记名令牌和/或客户端证书/密钥数据。
推荐阅读
- blazor - 将服务器端 Blazor 与一些离线页面(Razor 或客户端 Blazor)结合起来创建一个渐进式 Web 应用程序 (PWA)
- python-3.x - 如何在同一行打印 3D 数组?
- python - Python 2D 数组重新格式化为命名字典
- ruby-on-rails - 命令 `foreman start` 给出 Exec 格式错误
- if-statement - GREL:如何在 if 语句中使用 OR
- r - 根据闪亮应用程序的 rhandsontable 中其他单元格的修改更改单元格
- android - Flutter - 如何在 WebView 中下载文件?
- z3 - Z3 卡住了解决一个看似简单的存在
- python - 在 pyserial 和 Arduino 之间传递整数和布尔值的混合列表的安全快速的方法
- java - 在java中将.txt文件转换为.json文件