尝试从容器引擎 pod 将数据插入 BigQuery 失败
Posted
技术标签:
【中文标题】尝试从容器引擎 pod 将数据插入 BigQuery 失败【英文标题】:Trying to insert data into BigQuery fails from container engine pod 【发布时间】:2017-04-21 07:25:06 【问题描述】:我有一个简单的 node.js 应用程序,它尝试将一些数据插入 BigQuery。它使用提供的 gcloud node.js 库。
BigQuery 客户端是这样创建的,根据documentation:
google.auth.getApplicationDefault(function(err, authClient)
if (err)
return cb(err);
let bq = BigQuery(
auth: authClient,
projectId: "my-project"
);
let dataset = bq.dataset("my-dataset");
let table = dataset.table("my-table");
);
我尝试将数据插入 BiqQuery。
table.insert(someRows).then(...)
这失败了,因为 BigQuery 客户端返回 403 告诉我身份验证缺少所需的范围。文档告诉我使用以下 sn-p:
if (authClient.createScopedRequired &&
authClient.createScopedRequired())
authClient = authClient.createScoped([
"https://www.googleapis.com/auth/bigquery",
"https://www.googleapis.com/auth/bigquery.insertdata",
"https://www.googleapis.com/auth/cloud-platform"
]);
这也不起作用,因为 if 语句永远不会执行。我每次都跳过 if 并设置范围,但错误仍然存在。
我在这里缺少什么?为什么无论 authClient 配置如何,范围总是错误的?有没有人找到一种方法来让这个或类似的 gcloud 客户端库(如 Datastore)在 Container Engine pod 上使用所描述的身份验证方案?
到目前为止,我发现的唯一可行的解决方案是创建一个 json 密钥文件并将其提供给 BigQuery 客户端,但我宁愿动态创建凭据,然后将它们放在代码旁边。
旁注:在 Compute Engine VM 上运行时,节点服务在不向 BigQuery 提供身份验证选项的情况下完美运行,因为身份验证是由 Google 自动协商的。
【问题讨论】:
【参考方案1】:将 JSON-Keyfiles 烘焙到图像(容器)中是个坏主意(安全方面 [如您所说])。
您应该能够在创建 Kubernetes 集群期间将这些范围添加到它(之后无法调整)。
看看这个doc“--scopes”
【讨论】:
啊,我没有建集群。看起来这就是解决方案。谢谢,伙计!以上是关于尝试从容器引擎 pod 将数据插入 BigQuery 失败的主要内容,如果未能解决你的问题,请参考以下文章