2017-08-28 2 views
2

Est-il possible d'avoir un restreint Tableau de bord Kubernetes? L'idée est d'avoir un pod en cours d'exécution kubectl proxy dans le cluster (protégé par l'authentification HTTP de base) pour obtenir un aperçu rapide de l'état:Tableau de bord Kubernetes restreint?

  • sortie du journal des gousses
  • exécutant les services et les gousses
  • actuelles CPU/utilisation de la mémoire

Cependant, je ne pas que les utilisateurs soient en mesure de faire des actions « privilégiés », comme la création de nouvelles gousses, la suppression ou l'accès à des gousses secrets.

Existe-t-il une option pour démarrer le tableau de bord avec un utilisateur spécifié ou avec des autorisations restreintes?

Répondre

2

Cela devrait être possible dans les kubernetes avec RBAC activé. Vous n'avez pas besoin d'exécuter un module avec kubectl proxy. Je ne suis pas sûr qu'il soit possible d'avoir 2 ensembles d'autorisations différents pour le même module, mais dans le pire des cas, vous devez exécuter 2 tableaux de bord.

Fondamentalement, ce que vous devez faire est:

  • tableau de bord deploy dans votre cluster avec des autorisations en lecture seule dans RBAC
  • exposer votre service de tableau de bord en cours d'exécution
  • ajouter ingress with basic HTTP auth
1

Basé sur la réponse de lwolf, j'ai utilisé the kubernetes-dashboard.yaml et l'ai changé pour courir sur les esclaves, dans l'espace de noms par défaut.

Le changement important est la pièce kind: ClusterRole, name: view, qui attribue le rôle Afficher à l'utilisateur du tableau de bord.

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 
+0

Je pense que cela ne fonctionnera plus car le tableau de bord doit aussi créer des secrets – VsMaX