使用具有所有者角色的帐户创建 LoadBalancer 服务时 AKS 授权失败

问题描述

我正在尝试创建一个链接到 kubectl 上现有 PublicIP 的 Loadbalancer 服务。 虽然我是 resourceGroup(publicIP 和 k8s 集群)的所有者,但在 kubectl describe 中创建服务挂起并出现以下错误

同步负载均衡器时出错:无法确保负载均衡器:可重试:假,重试后:0s,HTTPStatusCode:403,RawError:可重试:假,重试后:0s,HTTPStatusCode:403,RawError:{"error":{"code ":"AuthorizationFailed","message":"具有对象 ID '[OBJECT_ID]' 的客户端 '[CLIENT_ID]' 无权在范围 '/subscriptions/[SUBSCRIPTION] 上执行操作 'Microsoft.Network/publicIPAddresses/read' ]/resourceGroups/[RESOURCE_GROUP]/providers/Microsoft.Network' 或范围无效。如果最近授予了访问权限,请刷新您的凭据。"}}

我已尝试在我的 kubectl 客户端上分配所有者角色,但问题仍然存在。

az role assignment create 
    --role Owner 
    --assignee xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

AKS 1.18.14

解决方法

以下指南回答了我的问题:https://docs.microsoft.com/en-us/azure/aks/static-ip#create-a-service-using-the-static-ip-address

事实证明,所有者许可在某种程度上是不够的。添加以下权限后,我可以创建链接到现有负载均衡器的服务:

az role assignment create \
    --assignee <SP Client ID> \
    --role "Network Contributor" \
    --scope /subscriptions/<subscription id>/resourceGroups/<resource group name>

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...