Implementación del Panel de Control Web de Kubernetes

Introducción al Panel de Kubernetes

El Panel de Control de Kubernetes (Dashboard) es una herramienta de gestión web que proporciona una interfaz visual para admiinstrar clústeres de Kubernetes. Ofrece funcionalidades para desplegar aplicaciones, gestionar recursos del clúster, visualizar registros de contenedores y supervisar el estado del sistema.

Según la documentación oficial, el Dashboard es una interfaz de usuario basada en web para Kubernetes que permite:

  • Desplegar aplicaciones contenerizadas en el clúster
  • Diagnosticar problemas en aplicaciones contenerizadas
  • Amdinistrar los recursos del clúster
  • Obtener una visión general de las aplicaciones en ejecución
  • Crear o modificar recursos individuales de Kubernetes

Proceso de Configuración

1. Configuración de Roles y Permisos

Primero, creamos un directorio para los archivos de configuración y definimos los roles de acceso:

$ mkdir k8s-dashboard
$ cd k8s-dashboard

Archivo de roles (dashboard-access.yaml):

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: ui-manager
  namespace: kube-system
  labels:
    k8s-app: dashboard
rules:
- apiGroups: [""]
  resources: ["secrets"]
  resourceNames: ["ui-key-holder", "ui-certificates"]
  verbs: ["get", "update", "delete"]
- apiGroups: [""]
  resources: ["configmaps"]
  resourceNames: ["ui-settings"]
  verbs: ["get", "update"]
- apiGroups: [""]
  resources: ["services"]
  resourceNames: ["metrics-server"]
  verbs: ["proxy"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: ui-binding
  namespace: kube-system
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: ui-manager
subjects:
- kind: ServiceAccount
  name: ui-service
  namespace: kube-system

$ kubectl apply -f dashboard-access.yaml

2. Creación de Secrets y ConfigMaps

Configuramos los secretos necesarios para la seguridad:

apiVersion: v1
kind: Secret
metadata:
  name: ui-certificates
  namespace: kube-system
type: Opaque
---
apiVersion: v1
kind: Secret
metadata:
  name: ui-key-holder
  namespace: kube-system
type: Opaque
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: ui-settings
  namespace: kube-system

$ kubectl apply -f dashboard-secrets.yaml

3. Despliegue del Controlador

Creamos el ServiceAccount y el Deployment:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: ui-service
  namespace: kube-system
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-ui
  namespace: kube-system
spec:
  selector:
    matchLabels:
      k8s-app: dashboard
  template:
    metadata:
      labels:
        k8s-app: dashboard
    spec:
      containers:
      - name: dashboard
        image: k8s.gcr.io/kubernetes-dashboard:v1.10.1
        ports:
        - containerPort: 8443
        args:
        - --auto-generate-certificates
        volumeMounts:
        - name: ui-certs
          mountPath: /certs
        resources:
          limits:
            cpu: 200m
            memory: 200Mi
      volumes:
      - name: ui-certs
        secret:
          secretName: ui-certificates
      serviceAccountName: ui-service

$ kubectl apply -f dashboard-deployment.yaml

4. Exposición del Servicio

Configuramos el servicio con tipo NodePort:

apiVersion: v1
kind: Service
metadata:
  name: web-ui-service
  namespace: kube-system
spec:
  type: NodePort
  selector:
    k8s-app: dashboard
  ports:
  - port: 443
    targetPort: 8443
    nodePort: 30443

$ kubectl apply -f dashboard-service.yaml

5. Verificación del Despliegue

$ kubectl get pods,svc -n kube-system

Configuración de Acceso Administrativo

Para acceder con privilegios de administrador:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-binding
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kube-system

$ kubectl apply -f admin-access.yaml
$ kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')

Resolución de Problemas de Certificados

Para solucionar problemas de certificados en navegadores modernos:

#!/bin/bash
# Generación de certificados personalizados
cat > ui-csr.json <<EOF
{
    "CN": "Kubernetes-Dashboard",
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "ES",
            "L": "Madrid",
            "ST": "Madrid"
        }
    ]
}
EOF

cfssl gencert -ca=/path/to/ca.pem -ca-key=/path/to/ca-key.pem \
  -config=/path/to/ca-config.json -profile=kubernetes ui-csr.json | cfssljson -bare dashboard

kubectl delete secret ui-certificates -n kube-system
kubectl create secret generic ui-certificates \
  --from-file=dashboard.pem --from-file=dashboard-key.pem -n kube-system

Actualice el Deployment para usar los certificados personalizados:

args:
- --auto-generate-certificates
- --tls-key-file=dashboard-key.pem
- --tls-cert-file=dashboard.pem

Acceda al Dashboard en: https://<nodo-ip>:30443 usando el token obtenido anteriormente.

Etiquetas: Kubernetes dashboard rbac nodeport service-account

Publicado el 9-30 05:29