我一直致力于一个python项目,目标是与Kubernetes互动。我遇到的一个问题是身份验证过程。与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-选项':'nosniff','日期':'XXXXXXXXXXXXXXXX','Content-Length':'XXX'})HTTP响应正文:{“kind”:“状态”,“apiVersion”:“v1”,“元数据” :{},“status”:“Failure”,“message”:“deployments.extensions被禁止:User \”XXXXXXXXXXXXXXXXXXX \“无法在命名空间中创建deployments.extensions \”default \“:Required \”container.deployments。 create“”permission。“,”reason“:”Forbidden“,”details“:{”group“:”extensions“,”kind“:”deployments“},”code“: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")
我可以进行身份验证,所有其他功能都应该完全正确。我不明白为什么会这样。我认为这可能是一个错误的迹象,并希望在继续之前解决它。有谁知道这里发生了什么,以及如何解决它?
从您的错误描述中我可以看到,您没有身份验证问题,但授权Kubernetes。这是两件不同的事情。
您发布的错误消息应按以下方式解释: “您无权对”部署“对象执行”创建“操作。”
阻止用户访问群集资源上的特定操作的机制称为RBAC - 基于角色的访问控制(RBAC),它是在GKE中构建的,通常在Kubernetes 1.6及更高版本中启用。
如何解决您的问题:
最可靠的方法是使用预定义的Cloud AIM roles for Kubernetes clusters之一,例如“roles / container.admin”,它将自动映射到ClusterRole(cluster-admin)。请记住应用“最小特权原则”,特别是对于生产集群。
进口口 os.environ [ “GOOGLE_APPLICATION_CREDENTIALS”] = 'GKE管理员-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"
}
]
如何使用kubernetes客户端进行python?
https://github.com/kubernetes-client/python
检查此示例以进行远程群集访问:
https://github.com/kubernetes-client/python/blob/master/examples/remote_cluster.py