提问者:小点点

从pod访问度量服务器


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

kubectl get --raw /apis/metrics.k8s.io/v1beta1/nodes

我想从 Pod 访问指标服务器。为此,我使用服务/公制服务器的 IP,它与公制服务器位于同一命名空间中。我尝试访问指标的方式是这样的:

    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的logs结果是:

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访问metric-server的正确方式吗?


共1个答案

匿名用户

我所做的是,我可以访问本地部署上的度量服务器:

    < li >设置正确的rbac < li >在pod内部:export CURL _ CA _ BUNDLE =/var/run/secrets/kubernetes . io/service account/CA . CRT TOKEN = $(cat/var/run/secrets/kubernetes . io/service account/CA . CRT CURL-H " Authorization:Bearer $ TOKEN "-k https://10 . 100 . 123 . 57/APIs/metrics . k8s . io/v1 beta 1/nodes