0
点赞
收藏
分享

微信扫一扫

在AKS中使用pod identity获取token - 解决获取token报错

在之前的demo中,实际上一开始部署好pod之后获取token是报错的,提示failed to refresh token

在AKS中使用pod identity获取token - 解决获取token报错_identity

这点其实还挺奇怪的,官方的sample没什么理由会报错,但是有可能有什么步骤官方没写或者没写在sample里,排查下log可以看看到底是什么问题

pod identity中两个核心组件mic和nmi的log是非常重要的,可以用kubectl logs看下输出的log里有什么信息

Kubectl logs mic-847b4bd46-qkfr8

mic的log里其实很清楚的指明了问题的原因,这个问题是因为有一个AAD中的object没有权限导致的,并且告诉了我们这个object的ID是什么

在AKS中使用pod identity获取token - 解决获取token报错_权限_02

但是很遗憾的是具体这个object是干啥的并没有写那么清楚,不过我们可以自己查下,只要有object id就可以直接查到这个object对应的各种属性,这要借助于Azure CLI

az ad sp list --all --query "[?objectId =='**' ]"

查询出来的结果可以看到,这个其实就是AKS用到的managed identity

在AKS中使用pod identity获取token - 解决获取token报错_Cloud_03

而要解决这个问题,需要手动进行授权,这点其实翻看下pod identity中关于role assignment的文章也可以清楚看到,只不过一开始以为AKS应该不需要手动授权所以直接忽略了,最后看来权限还是要手动加的

$ID=az aks show -g Apache -n SSLAKS --query identityProfile.kubeletidentity.clientId -o tsv
$SUBSCRIPTION_ID='****'
az role assignment create --role "Managed Identity Operator" --assignee $ID --scope "/subscriptions/$SUBSCRIPTION_ID/resourcegroups/MC_Apache_SSLAKS_eastasia"
az role assignment create --role "Virtual Machine Contributor" --assignee $ID --scope "/subscriptions/$SUBSCRIPTION_ID/resourcegroups/MC_Apache_SSLAKS_eastasia"

在AKS中使用pod identity获取token - 解决获取token报错_K8S_04

授权完成后,记得把MIC pod删除自动重建下,要不然还是一直报权限有问题

kubectl delete pod mic-847b4bd46-qkfr8

重新查看应用pod的log,成功拿到token,问题解决了

kubectl logs pod-identity-demo

在AKS中使用pod identity获取token - 解决获取token报错_K8S_05



举报

相关推荐

0 条评论