首页 > 解决方案 > 通过 Azure Active Directory (AKS) 对 kubernetes api 进行身份验证

问题描述

我想使用 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("%s\t%s\t%s" % (i.status.pod_ip, i.metadata.namespace, i.metadata.name))

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

回溯(最后一次调用):文件“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) 文件“/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 if 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 中返回 self。_load_azure_token(提供者)文件“/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']) 文件“/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-000000000000') 文件 "/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, None, 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 raise AdalError(return_error_string, error_response) adal.adal_error.AdalError: Get Token request returned http error: 400 and server response: {"error":"invalid_grant","error_description":"AADSTS65001: 用户或管理员未同意使用ID 为“Kubernetes AD Client”的应用程序。为此用户和资源发送交互式授权请求。\r\n跟踪 ID:\r\n相关 ID:\r\n时间戳:2019-10-14 12:32:35Z ","error_codes":[65001],"timestamp":"2019-10-14 12:32:35Z","trace_id":"","correlation_id":"","suberror":"consent_required"}

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

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

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

谢谢你的帮助

标签: pythonkubernetesazure-aks

解决方案


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

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

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


推荐阅读