首页 > 解决方案 > 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')
            }
        })
    })
}

我该如何解决这个问题,任何帮助将不胜感激?

标签: node.jskubernetes

解决方案


我发现我错过了一些东西,所以 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"
   }
};

推荐阅读