如何在 Azure kubernetes 服务中实现 RBAC 功能?
How to achieve the RBAC functionality in Azure kubernetes service?
截至目前,我所做的是,创建 kubernetes 集群并在网络中启用 RBAC UI,同时创建 cluster.Inside 集群,我创建了一个名为 development1[ 的命名空间=35=].现在我想授予用户访问一些属于 development1 namespace.For 的 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(命名空间)中的 pods。而不是列出 pods,得到类似
的错误
error: You must be logged in to the server (Unauthorized).
我的疑问是,是否有必要为该名称空间创建上下文?我应该在 deployment.yaml 和 service.yaml 中添加角色吗?
我不知道我错过了什么。任何人都可以建议我,我如何为用户授予 Azure 中 kubernetes 资源的权限?
您需要以该 Azure AD 用户身份登录到 Azure Cli,并以该用户身份提取 k8s 配置(az aks get-credentials -n xxx -g xxx)和 运行 kubectl get po -n development
。我不确定 --user
参数的含义,但我希望它会尝试使用您的 kubeconfig(您没有)中的该用户。我找不到任何关于使用 kubectl 允许用户非个性化的参考资料。
不要忘记事先清除您的 kubeconfig。
截至目前,我所做的是,创建 kubernetes 集群并在网络中启用 RBAC UI,同时创建 cluster.Inside 集群,我创建了一个名为 development1[ 的命名空间=35=].现在我想授予用户访问一些属于 development1 namespace.For 的 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(命名空间)中的 pods。而不是列出 pods,得到类似
error: You must be logged in to the server (Unauthorized).
我的疑问是,是否有必要为该名称空间创建上下文?我应该在 deployment.yaml 和 service.yaml 中添加角色吗?
我不知道我错过了什么。任何人都可以建议我,我如何为用户授予 Azure 中 kubernetes 资源的权限?
您需要以该 Azure AD 用户身份登录到 Azure Cli,并以该用户身份提取 k8s 配置(az aks get-credentials -n xxx -g xxx)和 运行 kubectl get po -n development
。我不确定 --user
参数的含义,但我希望它会尝试使用您的 kubeconfig(您没有)中的该用户。我找不到任何关于使用 kubectl 允许用户非个性化的参考资料。
不要忘记事先清除您的 kubeconfig。