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.