使用CURL获取系统进行Kubernetes API测试:匿名问题

问题描述

我正尝试运行curl -v -L --cacert cert.crt --key cert.key -k --request GET "https://*my-k8s-server-ip:port*/api/v1/namespaces/testing/services",它向我显示以下错误

{
  "kind": "Status","apiVersion": "v1","Metadata": {

  },"status": "Failure","message": "services is forbidden: User \"system:anonymous\" cannot list resource \"services\" in API group \"\" in the namespace \"testing\"","reason": "Forbidden","details": {
    "kind": "services"
  },"code": 403
}* Connection #0 to host *my-k8s-server-iP* left intact

但是当我尝试与Postman提供证书和密钥时,它可以很好地工作。 请帮忙。

解决方法

在这种情况下,Kubernetes API Server无法识别该用户,这使其默认为system:anonymous用户。

您需要使用--cert参数提供客户端证书,该证书应使用户使用CNAME(主题:CN)

curl -v -L --cacert cert.crt --key cert.key --cert client.crt -k --request GET "https://*my-k8s-server-ip:port*/api/v1/namespaces/testing/services

或者,您可以将服务帐户中的令牌用作BEARER令牌,如here

所述