如何在Azure kubernetes服务中实现RBAC功能?

时间:2019-03-05 13:44:18

标签: azure kubernetes azure-kubernetes azure-aks

到目前为止,我要做的是,创建kubernetes集群并在创建集群时在Web UI中启用RBAC。在集群内部,我创建了一个名为 development1 的命名空间。现在我想授予访问权限给属于development1名称空间的一些kubernetes资源上的用户。为此,我创建了一个角色并添加了一个 特定名称空间的用户。

这是我的配置文件:

deployment.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: hellonode
  namespace: development1
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: samplenodeapp
    spec:
      containers:
      - name: hellonode
        image: hellonode.azurecr.io/aks-deployments:latest
        ports:
        - containerPort: 3000
      imagePullSecrets:
      - name: webinar

service.yaml

apiVersion: v1
kind: Service
metadata:
  name: hellonode
  namespace: development1
  labels:
    app: samplenodeapp
spec:
  type: LoadBalancer
  ports:
  - port: 3000
  selector:
    app: samplenodeapp

role.yaml

kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  namespace: development1
  name: developer-role
rules:
- apiGroups: ["", "extensions", "apps"]
  resources: ["deployments", "replicasets"]
  verbs: ["*"]
rules:
- apiGroups: [""]
  resources: ["pods","pods/log","pods/exec"]
  verbs: ["get", "list", "watch", "create", "update", "patch"]

rolebinding.yaml

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: developer-rb
  namespace: development1
subjects:
- kind: User
  name: < Azure_AD_user_object-id>
  apiGroup: "rbac.authorization.k8s.io"
roleRef:
  kind: Role
  name: developer-role
  apiGroup: "rbac.authorization.k8s.io"

现在,我尝试使用命令kubectl get pods -n development --user=<Azure _AD_username>在deveploment1(namespace)中列出Pod。而不是列出豆荚,得到类似

的错误
  

错误:您必须登录到服务器(未经授权)。

我的疑问是,是否有必要为该命名空间创建上下文?我应该在Deployment.yaml和service.yaml中添加角色吗?

我不知道我错过了什么。任何人都可以建议我,如何在Azure中为用户授予对kubernetes资源的权限?

1 个答案:

答案 0 :(得分:2)

您需要以该Azure AD用户身份登录到Azure Cli,并以该用户身份启动k8s配置(即aks get-credentials -n xxx -g xxx)并运行kubectl get po -n development。我不确定--user参数的含义,但是我希望它尝试从您的kubeconfig(您没有)中使用该用户。我找不到任何允许使用kubectl进行用户个性化的参考。

别忘了先清除kubeconfig。