Kubernetes 从pod访问公制服务器

Kubernetes 从pod访问公制服务器,kubernetes,Kubernetes,我已经在kubernetes集群上部署了metric服务器,在运行以下命令时,该服务器工作正常: kubectl get --raw /apis/metrics.k8s.io/v1beta1/nodes 我想从pod访问metric服务器。为此,我使用服务/metric服务器的IP,它与metric服务器位于同一名称空间中。我尝试访问度量的方式如下所示: myurl := fmt.Sprintf("https://%s:%s/apis/metrics.k8s.io/v1beta1/no

我已经在kubernetes集群上部署了metric服务器,在运行以下命令时,该服务器工作正常:

kubectl get --raw /apis/metrics.k8s.io/v1beta1/nodes
我想从pod访问metric服务器。为此,我使用
服务/metric服务器的IP,它与metric服务器位于同一名称空间中。我尝试访问度量的方式如下所示:

    myurl := fmt.Sprintf("https://%s:%s/apis/metrics.k8s.io/v1beta1/nodes/", serviceHost, servicePort)
    u, err := url.Parse(myurl)
    if err != nil {
        panic(err)
    }
    req, err := http.NewRequest(httpMethod, u.String(), nil)
    if err != nil {
        log.Printf("Cant sned req: %s", err)
    }
    caToken, err := ioutil.ReadFile("/var/run/secrets/kubernetes.io/serviceaccount/token")
    if err != nil {
        panic(err) // cannot find token file
    }

    req.Header.Set("Content-Type", "application/json")
    req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", string(caToken)))

    caCertPool := x509.NewCertPool()
    caCert, err := ioutil.ReadFile("/var/run/secrets/kubernetes.io/serviceaccount/ca.crt")
    if err != nil {
        panic(err)
    }
    caCertPool.AppendCertsFromPEM(caCert)

    client := &http.Client{
        Transport: &http.Transport{
            TLSClientConfig: &tls.Config{
                RootCAs: caCertPool,
            },
        },
    }

    resp, err := client.Do(req)
    if err != nil {
        log.Printf("sending helm deploy payload failed: %s", err.Error())
        panic(err)
    }

这不起作用,pod的
日志
结果为:

Get https://METRIC-SERVER-SERVICE-IP/apis/metrics.k8s.io/v1beta1/nodes: x509: certificate is valid for 127.0.0.1, not METRIC-SERVER-SERVICE-IP

这是从pod访问metrics服务器的正确方法吗?

我这样做是为了在本地部署上访问metrics服务器:

  • 设置适当的rbac
  • 吊舱内: 导出CURL\u CA\u BUNDLE=/var/run/secrets/kubernetes.io/servicecomport/CA.crt 令牌=$(cat/var/run/secrets/kubernetes.io/servicecomport/ca.crt curl-H“授权:持票人$TOKEN”-k

  • 此错误看起来与证书相关,尽管消息有点令人困惑。当我跨越名称空间时,我对metrics server服务进行了一次curl测试,这导致了一个证书错误。然后我添加了
    --unsecure
    标志,该标志将获得我预期的禁止错误。希望这将为您指明正确的方向。您应该d在解释如何正确使用Kubernetes API的示例和语言时,请仔细阅读。我使用它读取ca.crt文件,但是,它不起作用,我得到相同的日志
    x509:证书对127.0.0.1有效,而不是METRIC-SERVER-SERVIC-IP