我一直在致力于与Kubernetes交互的python项目。我遇到的问题之一是身份验证过程。与this问题类似,我得到了错误
google.auth.exceptions.DefaultCredentialsError:无法自动确定凭据。请设置GOOGLE_APPLICATION_CREDENTIALS或明确创建凭据,然后重新运行该应用程序。有关更多信息,请参见https://cloud.google.com/docs/authentication/getting-started
我知道这可能是由于我使用了pycharm。但是,当我从终端运行它时,出现此错误:
kubernetes.client.rest.ApiException:(403) 原因:禁止 HTTP响应标头:HTTPHeaderDict({'Audit-Id':'XXXXXXXXXXX','Content-Type':'application / json','X-Content-Type-Options':'nosniff','Date':'XXXXXXXXXXXXXXXX' ,'Content-Length':'XXX'}) HTTP响应正文:{“种类”:“状态”,“ apiVersion”:“ v1”,“元数据”:{},“状态”:“故障”,“消息”:“ deployments.extensions:用户\” XXXXXXXXXXXXXXXXXXX \“无法在名称空间\” default \“中创建Deployments.extensions:必需\” container.deployments.create \“权限。”,“ reason”:“ Forbidden”,“ details”:{“ group”:“ extensions “,”种类“:”部署“},”代码“:403}
但是,当我从以下位置更改代码时
os.system(f"gcloud container clusters get-credentials {cluster_name} --zone {zone} --project {project}")
到
os.system(f"gcloud container clusters get-credentials {cluster_name} --zone {zone} --project {project}")
os.system("kubectl run hello-server --image gcr.io/google-samples/hello-app:1.0 --port 8080")
os.system("kubectl delete deployments hello-server")
我可以进行身份验证,所有其他功能都应正确执行。我不明白为什么会这样。我认为这可能表明出现了问题,请在继续操作之前先进行修复。有谁知道这里发生了什么,以及如何解决?
答案 0 :(得分:1)
从您的错误描述中可以看出,您没有遇到身份验证问题,但是对Kubernetes的授权。这是两件事。
您发布的错误消息应通过以下方式进行解释:
“ 您无权在“部署”对象上执行“创建”操作。”
阻止用户访问群集资源上特定操作的机制称为RBAC-基于角色的访问控制(RBAC),它内置在GKE中,通常在Kubernetes 1.6及更高版本中启用。
如何解决您的问题:
最简单的方法是使用预定义的Cloud AIM roles for Kubernetes clusters中的一种,例如“角色/ container.admin”,它将自动映射到ClusterRole(cluster-admin)。请记住要应用“最小特权原则”,尤其是对于生产集群。
如果您在步骤#1中创建了GCP服务帐户
以JSON格式下载其密钥
通过设置环境变量GOOGLE_APPLICATION_CREDENTIALS
我直接在我的python应用程序中对其进行设置:
导入操作系统
os.environ [“ GOOGLE_APPLICATION_CREDENTIALS”] ='gke-admin-svc-key.json'
从现在开始,您应该能够在GCP服务帐户的背景下从外部与群集进行交互,这应该反映在审核日志中:
authenticationInfo: {
principalEmail: "<id_of_your_svc_account>"
}
authorizationInfo: [
0: {
granted: true
permission: "io.k8s.core.v1.pods.list"
resource: "core/v1/pods"
}
]
答案 1 :(得分:0)
如何将kubernetes客户端用于python?
https://github.com/kubernetes-client/python
检查此示例以进行远程集群访问:
https://github.com/kubernetes-client/python/blob/master/examples/remote_cluster.py