Authentification to kubernetes api via Azure Active Director



我想使用 python kubernetes-client 连接到我的 AKS 群集 api。

为此,我尝试使用 kubernetes 给出的示例:

config.load_kube_config()
v1 = client.CoreV1Api()
print("Listing pods with their IPs:")
ret = v1.list_pod_for_all_namespaces(watch=False)
for i in ret.items:
print("%st%st%s" % (i.status.pod_ip, i.metadata.namespace, i.metadata.name))

它应该加载我的本地 kubeconfig 并获取 pods 列表,但我收到以下错误:

回溯(最近一次调用(:文件 "test.py",第 4 行,在 config.load_kube_config(( 文件 "/Users//works/test-kube-api-python/env/lib/python2.7/site-packages/kubernetes/config/kube_config.py", 661路,load_kube_config loader.load_and_set(config( File "/Users//works/test-kube-api-python/env/lib/python2.7/site-packages/kubernetes/config/kube_config.py", 469路,load_and_set self._load_authentication(( 文件 "/Users//works/test-kube-api-python/env/lib/python2.7/site-packages/kubernetes/config/kube_config.py", 203号线,_load_authentication 如果self._load_auth_provider_token((:文件 "/Users//works/test-kube-api-python/env/lib/python2.7/site-packages/kubernetes/config/kube_config.py", 221路,_load_auth_provider_token return self._load_azure_token(provider( File "/Users//works/test-kube-api-python/env/lib/python2.7/site-packages/kubernetes/config/kube_config.py", 233号线,_load_azure_token self._refresh_azure_token(provider['config']( File "/Users//works/test-kube-api-python/env/lib/python2.7/site-packages/kubernetes/config/kube_config.py", 253路,_refresh_azure_token refresh_token,client_id,'00000002-0000-0000-c000-0000000000000'( 文件 "/Users//works/test-kube-api-python/env/lib/python2.7/site-packages/adal/authentication_context.py", 236路,acquire_token_with_refresh_token 返回self._acquire_token(token_func( 文件 "/Users//works/test-kube-api-python/env/lib/python2.7/site-packages/adal/authentication_context.py", 128号线,_acquire_token 返回token_func(self( 文件 "/Users//works/test-kube-api-python/env/lib/python2.7/site-packages/adal/authentication_context.py", 234号线,token_func 返回 token_request.get_token_with_refresh_token(refresh_token, client_secret( 文件 "/Users//works/test-kube-api-python/env/lib/python2.7/site-packages/adal/token_request.py", 343行,get_token_with_refresh_token 返回self._get_token_with_refresh_token(refresh_token、无、client_secret(文件 "/Users//works/test-kube-api-python/env/lib/python2.7/site-packages/adal/token_request.py", 340路,_get_token_with_refresh_token 返回self._oauth_get_token(oauth_parameters( 文件 "/Users//works/test-kube-api-python/env/lib/python2.7/site-packages/adal/token_request.py", 112路,_oauth_get_token 返回client.get_token(oauth_parameters( 文件 "/Users//works/test-kube-api-python/env/lib/python2.7/site-packages/adal/oauth2_client.py", 291行,get_token adal.adal_error,return_error_string,error_response(引发AdalError((。AdalError: 获取令牌请求返回 http 错误: 400 和服务器响应: {"error":"invalid_grant","error_description":"AADSTS65001:用户或 管理员不同意使用带有 ID 的应用程序 '' 名为 'Kubernetes AD Client '.为此用户发送交互式授权请求,并且 资源。\r跟踪标识: \r相关标识: \r时间戳:2019-10-14 12:32:35Z","error_codes":[65001],"时间戳":"2019-10-14 12:32:35Z","trace_id":","correlation_id":","子错误":"consent_required"}

我真的不明白为什么它不起作用。

当我使用 kubectl 时,一切正常。

我阅读了一些文档,但我不确定是否理解 adal 错误。

感谢您的帮助

  • 以租户管理员身份登录以 https://portal.azure.com
  • 转到">
  • 设置",然后转到"所需权限">
  • 按授予权限按钮

如果你不是租户管理员,则无法授予管理员同意

从 https://github.com/Azure-Samples/active-directory-angularjs-singlepageapp-dotnet-webapi/issues/19

这是一篇很好的帖子,您可以在其中找到要向 AKS 进行身份验证的代码片段:

from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient
from azure.mgmt.containerservice import ContainerServiceClient
from azure.mgmt.containerservice.models import (ManagedClusterAgentPoolProfile,
ManagedCluster)
credential = AzureCliCredential()
subscription_id = "XXXXX"
resource_group= 'MY-RG'
resouce_client=ResourceManagementClient(credential,subscription_id)
container_client=ContainerServiceClient(credential,subscription_id)
resouce_list=resouce_client.resources.list_by_resource_group(resource_group)

注意:您需要安装相应的 Az Python SKD 库。

相关内容

最新更新