受限制的 Kubernetes 仪表板?
Restricted Kubernetes dashboard?
是否可以受限 Kubernetes 仪表板?这个想法是在集群中有一个 pod 运行 kubectl proxy
(受基本 HTTP 身份验证保护)以快速了解状态:
- pods
的日志输出
- 运行 服务和 pods
- 当前 CPU/memory 使用情况
但是,我不希望用户能够执行"privileged"操作,例如创建新的pods、删除pods或访问机密。
是否有一些选项可以使用指定用户或受限权限启动仪表板?
在启用了 RBAC 的 kubernetes 中应该是可以的。
您不需要 运行 带有 kubectl proxy
的广告连播。
我不确定是否可以为同一个 pod 设置 2 组不同的权限,但最坏的情况是你必须 运行 2 个仪表板。
基本上,您需要做的是:
- 在 RBAC 中使用只读权限在您的集群中部署仪表板
- 公开您的 运行ning 仪表板服务
- 添加ingress with basic HTTP auth
根据 lwolf 的回答,我使用 the kubernetes-dashboard.yaml 并将其更改为 运行 在奴隶上,在默认命名空间中。
重要的变化是 kind: ClusterRole, name: view
部分,它将 view 角色分配给仪表板用户。
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
k8s-app: kubernetes-dashboard
name: ro-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: ro-dashboard
labels:
k8s-app: kubernetes-dashboard
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: view
subjects:
- kind: ServiceAccount
name: ro-dashboard
apiGroup: ''
namespace: default
---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: ro-dashboard
spec:
replicas: 1
revisionHistoryLimit: 0
selector:
matchLabels:
k8s-app: kubernetes-dashboard
template:
metadata:
labels:
k8s-app: kubernetes-dashboard
spec:
containers:
- name: kubernetes-dashboard
image: gcr.io/google_containers/kubernetes-dashboard-amd64:v1.6.3
ports:
- containerPort: 9090
protocol: TCP
livenessProbe:
httpGet:
path: /
port: 9090
initialDelaySeconds: 30
timeoutSeconds: 30
serviceAccountName: ro-dashboard
---
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: ro-dashboard
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 9090
selector:
k8s-app: kubernetes-dashboard
是否可以受限 Kubernetes 仪表板?这个想法是在集群中有一个 pod 运行 kubectl proxy
(受基本 HTTP 身份验证保护)以快速了解状态:
- pods 的日志输出
- 运行 服务和 pods
- 当前 CPU/memory 使用情况
但是,我不希望用户能够执行"privileged"操作,例如创建新的pods、删除pods或访问机密。
是否有一些选项可以使用指定用户或受限权限启动仪表板?
在启用了 RBAC 的 kubernetes 中应该是可以的。
您不需要 运行 带有 kubectl proxy
的广告连播。
我不确定是否可以为同一个 pod 设置 2 组不同的权限,但最坏的情况是你必须 运行 2 个仪表板。
基本上,您需要做的是:
- 在 RBAC 中使用只读权限在您的集群中部署仪表板
- 公开您的 运行ning 仪表板服务
- 添加ingress with basic HTTP auth
根据 lwolf 的回答,我使用 the kubernetes-dashboard.yaml 并将其更改为 运行 在奴隶上,在默认命名空间中。
重要的变化是 kind: ClusterRole, name: view
部分,它将 view 角色分配给仪表板用户。
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
k8s-app: kubernetes-dashboard
name: ro-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: ro-dashboard
labels:
k8s-app: kubernetes-dashboard
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: view
subjects:
- kind: ServiceAccount
name: ro-dashboard
apiGroup: ''
namespace: default
---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: ro-dashboard
spec:
replicas: 1
revisionHistoryLimit: 0
selector:
matchLabels:
k8s-app: kubernetes-dashboard
template:
metadata:
labels:
k8s-app: kubernetes-dashboard
spec:
containers:
- name: kubernetes-dashboard
image: gcr.io/google_containers/kubernetes-dashboard-amd64:v1.6.3
ports:
- containerPort: 9090
protocol: TCP
livenessProbe:
httpGet:
path: /
port: 9090
initialDelaySeconds: 30
timeoutSeconds: 30
serviceAccountName: ro-dashboard
---
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: ro-dashboard
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 9090
selector:
k8s-app: kubernetes-dashboard