node.js - Node.js 无法向 k8s api 服务器发出请求
问题描述
我正在尝试对 k8s api 服务器进行 api 调用以更新部署。我可以在下面使用来更新部署。
curl -X PATCH --header "Authorization: Bearer $TOKEN" --insecure -H 'Content-Type: application/strategic-merge-patch+json' --data '
{ "spec": { "template": { "spec": { "containers": [ { "name": "nlu","env": [ { "name": "LAST_UPDATE", "value": "123123" } ] } ] } } } }' \
'https://10.1.0.4:6443/apis/apps/v1/namespaces/prod/deployments/nlu?fieldManager=strategic'
但是当我使用 node.js 请求模块发出请求时,出现如下错误
消息:“读取 ECONNRESET”
这是我的代码
restart()
{
const options = {
url: "http://10.1.0.4:6443",
body: JSON.stringify({
"spec": {
"template": {
"spec": {
"containers": [
{
"name": "nlu",
"env": [
{
"name": "LAST_UPDATE",
"value": "20190909"
}
]
}
]
}
}
}
}),
auth: {
'bearer': "mytoken"
}
};
return new Promise(function(resolve,reject){
request.patch(options, (err , res)=>{
if(err)
{
reject(err)
} else
{
resolve('done')
}
})
})
}
我该如何解决这个问题,任何帮助将不胜感激?
解决方案
我发现我错过了一些东西,所以 k8s 服务器拒绝了我的请求。首先,url 应该以 https 而不是 http 开头。其次,我应该在请求头中添加内容类型“application/strategic-merge-patch+json”。第三,我还必须在请求中添加rejectUnauthorized: false 以在验证服务器身份失败时忽略错误。
正确的请求应该是
const options = {
url: "https://10.1.0.4:6443",
headers: {
"content-type": "application/strategic-merge-patch+json"
},
rejectUnauthorized: false,
body: JSON.stringify({
"spec": {
"template": {
"spec": {
"containers": [
{
"name": "nlu",
"env": [
{
"name": "LAST_UPDATE",
"value": "20190909"
}
]
}
]
}
}
}
}),
auth: {
'bearer': "mytoken"
}
};
推荐阅读
- ios - 在 managedContext.save 之后没有更新核心数据,但没有抛出错误
- discord.js - “宣布”命令在控制台中给出错误
- unity3d - 如何在 Unity 中预制动画?
- apache-kafka - 如何将自定义 avro 模式与 dockerized connect-datagen 一起使用?
- java - 将表单单选值发送到 Java servlet,返回 null
- c++ - pthread没有给出预期的输出
- python-3.x - 现在在 Eager TensorFlow 中加载是否已损坏?
- kubernetes - 如何为用户设置 RBAC 以在特定命名空间中提交 Argo 工作流?
- java - 忽略大小写正则表达式
- go - 在 Go 中查找 gRPC 调用的客户端名称