Kubernetes授权,只有在运行hello-server后才能成功

问题描述 投票:0回答:2

我一直致力于一个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")

我可以进行身份​​验证,所有其他功能都应该完全正确。我不明白为什么会这样。我认为这可能是一个错误的迹象,并希望在继续之前解决它。有谁知道这里发生了什么,以及如何解决它?

python authentication kubernetes
2个回答
1
投票

从您的错误描述中我可以看到,您没有身份验证问题,但授权Kubernetes。这是两件不同的事情。

您发布的错误消息应按以下方式解释: “您无权对”部署“对象执行”创建“操作。”

阻止用户访问群集资源上的特定操作的机制称为RBAC - 基于角色的访问控制(RBAC),它是在GKE中构建的,通常在Kubernetes 1.6及更高版本中启用。

如何解决您的问题:

  1. 授予您的GCP用户/ GCP服务帐户适当的角色。

最可靠的方法是使用预定义的Cloud AIM roles for Kubernetes clusters之一,例如“roles / container.admin”,它将自动映射到ClusterRole(cluster-admin)。请记住应用“最小特权原则”,特别是对于生产集群。

  1. 如果您在步骤#1中创建了GCP服务帐户 以JSON格式下载密钥 通过设置环境变量GOOGLE_APPLICATION_CREDENTIALS为您的应用程序代码提供身份验证凭据 我在我的python应用程序中直接设置它:

进口口 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"     
   }
  ]

0
投票

如何使用kubernetes客户端进行python?

https://github.com/kubernetes-client/python

检查此示例以进行远程群集访问:

https://github.com/kubernetes-client/python/blob/master/examples/remote_cluster.py

© www.soinside.com 2019 - 2024. All rights reserved.