Kubernetes: Autenticación y Autorización Nivelada para Dashboard

Capítulo 1: Despliegue del Dashboard

El Dashboard de Kubernetes es una interfaz web que permite a los usuarios desplegar aplicaciones contenerizadas, gestionar problemas y aplicaciones, y administrar el propio clúster a través de una interfaz gráfica.<br></br>Mediante el Dashboard, los usuarios pueden visualizar el estado de las aplicaciones en el clúster y crear o modificar despliegues, trabajos, servicios y otros recursos de Kubernetes.<br></br>El asistente de despliegue facilita la ampliación o reducción de despliegues, actualizaciones graduales, reinicio de Pods y despliegue de nuevas aplicaciones.

Repositorio del proyecto: https://github.com/kubernetes/dashboard. Aunque la documentación indica que se puede instalar directamente, en la práctica, los usuarios en China necesitan descargar y modificar los archivos para poder utilizarlo.

Descargar el archivo YAML

[root@k8s-master01 manifests]# mkdir dashboard
[root@k8s-master01 manifests]# cd dashboard/
[root@k8s-master01 dashboard]# wget  https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml

Modifciar la dirección de la imagen y el tipo de servicio en el archivo YAML

Después de las modificaciones, aplicar el archivo YAML

[root@k8s-master01 dashboard]# kubectl apply -f kubernetes-dashboard.yaml 
serviceaccount "kubernetes-dashboard" unchanged
role.rbac.authorization.k8s.io "kubernetes-dashboard-minimal" unchanged
rolebinding.rbac.authorization.k8s.io "kubernetes-dashboard-minimal" unchanged
deployment.apps "kubernetes-dashboard" configured
service "kubernetes-dashboard" configured
[root@k8s-master01 dashboard]# kubectl get pod -n kube-system  <strong> #El dashboard se encuentra en el namespace kube-system</strong>
NAME                                    READY     STATUS    RESTARTS   AGE
......
kubernetes-dashboard-7b689d867f-f67hm   1/1       Running   0          27s
[root@k8s-master01 dashboard]# kubectl get svc -n kube-system  <strong>#Verificar si el servicio y el puerto están habilitados</strong>
NAME                   TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)         AGE
......
kubernetes-dashboard   NodePort    10.101.22.15   <none>        443:32333/TCP   13m

Acceder mediante la IP del master:puerto. Debería aparecer la siguiente interfaz

Desde la interfaz podemos ver que para acceder al Dashboard se requiere autorización mediante config o token, pero el Dashboard en sí no proporciona autorización. Como el Dashboard es un Pod, en realidad estamos usando este Pod para autenticarnos en el clúster de Kubernetes. Necesitamos proporcionar autenticación mediante config o token para el Pod del Dashboard, por lo que el sujeto de autenticación debería ser un serviceaccount

Si aparece el siguiente error

Esto se debe a un problema en la creación del secret en el archivo YAML. Necesitmaos crear un certificado manualmente para la autenticación. A continuación, creamos un certificado

[root@k8s-master01 dashboard]# cd /etc/kubernetes/pki/
[root@k8s-master01 pki]# (umask 077; openssl genrsa -out dashboard.key 2048)  <strong>#Crear un certificado</strong>
Generating RSA private key, 2048 bit long modulus
............................................................................................+++
.............+++
e is 65537 (0x10001)
[root@k8s-master01 pki]# openssl req -new -key dashboard.key -out dashboard.csr -subj "/O=qiangungun/CN=kubernetes-dashboard"    #Crear una solicitud de firma de certificado
[root@k8s-master01 pki]# openssl x509 -req -in dashboard.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out dashboard.crt -days 3650 #Firmar el certificado usando el CA del clúster
Signature ok
subject=/O=qiangungun/CN=kubernetes-dashboard
Getting CA Private Key
[root@k8s-master01 pki]# kubectl create secret generic kubernetes-dashboard-certs --from-file=dashboard.crt=./dashboard.crt --from-file=dashboard.key=./dashboard.key  -n kube-system  <strong>#Crear un secret con nuestro certificado para que Kubernetes lo use</strong>
secret "kubernetes-dashboard-certs" created

Comentar la configuración del secret en el archivo YAML del Dashboard

Volver a aplicar el archivo YAML

[root@k8s-master01 dashboard]# kubectl delete  -f kubernetes-dashboard.yaml 
[root@k8s-master01 dashboard]# kubectl apply  -f kubernetes-dashboard.yaml 

[root@k8s-master01 dashboard]# kubectl create serviceaccount dashboard-admin -n kube-system <strong>#Crear un serviceaccount para iniciar sesión en el Dashboard</strong>
serviceaccount "dashboard-admin" created
[root@k8s-master01 dashboard]# kubectl create clusterrolebinding dashboard-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin  <strong> #Crear un clusterrolebinding que enlace el clusterrole cluster-admin con nuestro serviceaccount</strong>
clusterrolebinding.rbac.authorization.k8s.io "dashboard-cluster-admin" created   
[root@k8s-master01 dashboard]# kubectl get secret -n kube-system <strong>#Después de crear, el sistema genera automáticamente un secret</strong>
NAME                                             TYPE                                  DATA      AGE
......
dashboard-admin-token-pbsj9                      kubernetes.io/service-account-token   3         4m
.....
[root@k8s-master01 dashboard]# kubectl describe secret dashboard-admin-token-pbsj9 -n kube-system  <strong>#Ver los detalles del secret, especialmente el token</strong>
Name:         dashboard-admin-token-pbsj9
Namespace:    kube-system
Labels:       <none>
Annotations:  kubernetes.io/service-account.name=dashboard-admin
              kubernetes.io/service-account.uid=b24fb2eb-f5e1-11e8-8969-5254001b07db

Type:  kubernetes.io/service-account-token

Data
====
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tcGJzajkiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiYjI0ZmIyZWItZjVlMS0xMWU4LTg5NjktNTI1NDAwMWIwN2RiIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRhc2hib2FyZC1hZG1pbiJ9.jDtIZFrcAPkr71pSStWm1AD4_gJM9A4JeYics3Nxs0hm2NQSCgL_pAIlVlSiHELmn3TLasOcvy8SljQnZQJcLKSkP-ubSBe8IkzXJkBr3SOhEr6eHb1ZDHXtC9bx58QH6PEOnO3hwoUaEtcIMuzC8ULbMp5f4TCvZ5mSKL_WPwaVJgZZDteUBPOsZHfcfIyatjXOWZBhiWbD3UZIN47ghpZl6BdXVeqLT5ua8Z8G0qtRD-DoDiQOaQ5Z9nKo_yluyb5cLJgpAtAl9i4Df7exHgVRnPETk1fbnxCDTGYlEgmLKFU6tRCEKl5Q66O9TICpdJIeT4sUBJxDSFVScPNFrA
ca.crt:     1025 bytes
namespace:  11 bytes<br></br>

Para versiones 1.24 y posteriores (https://kuberneets.io/docs/concepts/configuration/secret/#secret-types)

apiVersion: v1
kind: Secret
metadata:
  name: dashboard-admin
  namespace: kube-system
  annotations:
    kubernetes.io/service-account.name: "dashboard-admin"   
type: kubernetes.io/service-account-token  

kubectl get secret admin-user -n kubernetes-dashboard -o jsonpath={".data.token"} | base64 -d  #Obtener el token

Copiar el token del secret para acceder al Dashboard

Seleccionar "Token" y pegar el token copiado, luego hacer clic en "Iniciar sesión"

Podemos ver que se pueden administrar todos los recursos del clúster

2. Crear un usuario con permisos de administración en un namespace específico

[root@k8s-master01 dashboard]# kubectl create serviceapp default-ns-admin -n default<strong> #Crear otro serviceaccount en el namespace default</strong>
serviceaccount "default-ns-admin" created
[root@k8s-master01 dashboard]# kubectl create rolebinding default-ns-admin --clusterrole=admin --serviceaccount=default:default-ns-admin <strong>#Usar rolebinding para enlazar el clusterrole admin al serviceaccount recién creado</strong>
rolebinding.rbac.authorization.k8s.io "default-ns-admin" created
[root@k8s-master01 dashboard]# kubectl get secret 
NAME                           TYPE                                  DATA      AGE
......
default-ns-admin-token-26xgs   kubernetes.io/service-account-token   3         2m
......
[root@k8s-master01 dashboard]# kubectl describe secret default-ns-admin-token-26xgs 
Name:         default-ns-admin-token-26xgs
Namespace:    default
Labels:       <none>
Annotations:  kubernetes.io/service-account.name=default-ns-admin
              kubernetes.io/service-account.uid=b13f19e9-f5ec-11e8-8969-5254001b07db

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1025 bytes
namespace:  7 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImRlZmF1bHQtbnMtYWRtaW4tdG9rZW4tMjZ4Z3MiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGVmYXVsdC1ucy1hZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImIxM2YxOWU5LWY1ZWMtMTFlOC04OTY5LTUyNTQwMDFiMDdkYiIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpkZWZhdWx0OmRlZmF1bHQtbnMtYWRtaW4ifQ.T1TsD-SyHDgpMMLWk75TFtYxOzc6SQcUHD4FsNEEjx6p48G9smBoh7fO6_y9NIvZKCjIGvzKt-ZUhRg7Oxk6vL2JIODe2apQQQBYyIzzW2y1ZFSICPpEHs0FYwt84RsUefGLLfEq0BrGa22mV58UfcttSMZN9LAUuWYe_1UX81F9neAuknKO78BNzif854SFOLvOaqOqNfMSiXs8Fi3vWPLi8_QFihObrC_FkDBhzc62zYtXzpH8T7gzadfAIexLpX7__RmcY8Cuaf7XvRh-zn3SAcmwo8v2ydtwOwTOtPA-6gEXGSM2UfR-rZ0WloPCIvGonej8fbNgH8G9sT2KTg

Usar este token para iniciar sesión en el Dashboard

Podemos ver que solo se puede ver el namespace default, no otros namespaces

Capítulo 3: Creación de usuarios para el Dashboard mediante Config

Para simplificar, usaremos directamente el token del serviceaccount creado anteriormente

<strong>[root@k8s-master01 dashboard]# cd /etc/kubernetes/pki/
[root@k8s-master01 pki]# kubectl config set-cluster kubernetes --certificate-authority=./ca.crt --server="https://172.16.150.212:6443" --embed-certs=true --kubeconfig=/root/ns-</strong><strong>admin.conf  #Crear un nuevo cluster llamado kubernetes usando el CA del clúster</strong>
Cluster "kubernetes" set.
<strong>[root@k8s</strong><strong>-master01 pki]# kubectl config view --kubeconfig=/root/ns-</strong><strong>admin.conf  #Ver la información creada</strong>
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: REDACTED
    server: https://172.16.150.212:6443
  name: kubernetes
contexts: []
current-context: ""
kind: Config
preferences: {}
users: []
<strong>[root@k8s</strong><strong>-master01 pki]# cd 
[root@k8s-master01 ~]# kubectl get secret 
[root@k8s-master01 ~]# NS_ADMIN_TOKEN=$(kubectl get secret default-ns-admin-token-26xgs -o jsonpath={.data.token}|base64 -d) #El token generado por k8s está en base64, por lo que necesita ser decodificado
[root@k8s-master01 ~]# kubectl config set-credentials ns-admin --token=$NS_ADMIN_TOKEN --kubeconfig=/root/ns-</strong><strong>admin.conf #Crear un usuario para el serviceaccount</strong>
User "ns-admin" set.
<strong>[root@k8s</strong><strong>-master01 manifests]# kubectl config view --kubeconfig=/root/ns-</strong><strong>admin.conf 
</strong>apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: REDACTED
    server: https://172.16.150.212:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: ns-admin
  name: ns-admin@kubernetes
current-context: ""
kind: Config
preferences: {}
users:
- name: ns-admin
  user:
    token: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImRlZmF1bHQtbnMtYWRtaW4tdG9rZW4tMjZ4Z3MiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGVmYXVsdC1ucy1hZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImIxM2YxOWU5LWY1ZWMtMTFlOC04OTY5LTUyNTQwMDFiMDdkYiIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpkZWZhdWx0OmRlZmF1bHQtbnMtYWRtaW4ifQ.T1TsD-SyHDgpMMLWk75TFtYxOzc6SQcUHD4FsNEEjx6p48G9smBoh7fO6_y9NIvZKCjIGvzKt-ZUhRg7Oxk6vL2JIODe2apQQQBYyIzzW2y1ZFSICPpEHs0FYwt84RsUefGLLfEq0BrGa22mV58UfcttSMZN9LAUuWYe_1UX81F9neAuknKO78BNzif854SFOLvOaqOqNfMSiXs8Fi3vWPLi8_QFihObrC_FkDBhzc62zYtXzpH8T7gzadfAIexLpX7__RmcY8Cuaf7XvRh-zn3SAcmwo8v2ydtwOwTOtPA-6gEXGSM2UfR-rZ0WloPCIvGonej8fbNgH8G9sT2KTg
<strong>[root@k8s</strong><strong>-master01 manifests]# kubectl config use-context ns-admin@kubernetes --kubeconfig=/root/ns-</strong><strong>admin.conf #Establecer el contexto para el serviceaccount actual</strong>
Switched to context "ns-admin@kubernetes".
<strong>[root@k8s</strong><strong>-master01 manifests]# kubectl config view --kubeconfig=/root/ns-</strong><strong>admin.conf 
</strong>apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: REDACTED
    server: https://172.16.150.212:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: ns-admin
  name: ns-admin@kubernetes
current-context: ns-admin@kubernetes
kind: Config
preferences: {}
users:
- name: ns-admin
  user:
    token: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImRlZmF1bHQtbnMtYWRtaW4tdG9rZW4tMjZ4Z3MiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGVmYXVsdC1ucy1hZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImIxM2YxOWU5LWY1ZWMtMTFlOC04OTY5LTUyNTQwMDFiMDdkYiIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpkZWZhdWx0OmRlZmF1bHQtbnMtYWRtaW4ifQ.T1TsD-SyHDgpMMLWk75TFtYxOzc6SQcUHD4FsNEEjx6p48G9smBoh7fO6_y9NIvZKCjIGvzKt-ZUhRg7Oxk6vL2JIODe2apQQQBYyIzzW2y1ZFSICPpEHs0FYwt84RsUefGLLfEq0BrGa22mV58UfcttSMZN9LAUuWYe_1UX81F9neAuknKO78BNzif854SFOLvOaqOqNfMSiXs8Fi3vWPLi8_QFihObrC_FkDBhzc62zYtXzpH8T7gzadfAIexLpX7__RmcY8Cuaf7XvRh-zn3SAcmwo8v2ydtwOwTOtPA-6gEXGSM2UfR-rZ0WloPCIvGonej8fbNgH8G9sT2KTg

Exportar /root/ns-admin.conf al cliente y seleccionar el método kubeconfig para iniciar sesión, haciendo clic en "Seleccionar archivo"

Sin problemas, el inicio de sesión fue exitoso

Capítulo 4: Uso del Dashboard

1. Funciones proporcionadas por el Dashboard

De forma predeterminada, el Dashboard muestra objetos en el namespace default, pero también se pueden seleccionar otros namespaces mediante el selector de namespaces. La interfaz de usuario del Dashboard puede mostrar la mayoría de los tipos de objetos del clúster.

1) Gestión del clúster
La vista de gestión del clúster se utiliza para administrar nodos, namespaces, volúmenes de almacenamiento persistentes, roles y clases de almacenamiento. La vista de nodos muestra el uso de CPU y memoria, así como la fecha de creación y el estado de ejecución del nodo. La vista de namespaces muestra qué namespaces existen en el clúster y su estado de ejecución. La vista de roles muestra en forma de lista qué roles existen en el clúster, sus tipos y namespaces. Los volúmenes de almacenamiento persistentes se muestran en forma de lista, donde se puede ver el almacenamiento total, los modos de acceso y el estado de uso de cada volumen; los administradores también pueden eliminar y editar los archivos YAML de los volúmenes de almacenamiento persistentes.

2) Cargas de trabajo
La vista de cargas de trabajo muestra todos los tipos de cargas de trabajo como despliegues, conjuntos de réplicas, conjuntos de réplicas con estado, etc. En esta vista, las cargas de trabajo se organizan según sus tipos. La vista de detalles de las cargas de trabajo puede mostrar información detallada y de estado de la aplicación, así como las relaciones entre objetos.

3) Descubrimiento de servicios y balanceo de carga
La vista de descubrimiento de servicios puede exponer los servicios del clúster a aplicaciones externas, tanto internas como externas pueden llamar a las aplicaciones a través de los servicios expuestos, las aplicaciones externas usan puntos de acceso externos y las aplicaciones internas usan puntos de acceso internos.

4) Almacenamiento
La vista de almacenamiento muestra los recursos de solicitud de volúmenes de almacenamiento persistentes utilizados por las aplicaciones para almacenar datos.

5) Configuración
La vista de configuración muestra información de configuración utilizada por las aplicaciones durante la ejecución. Kubernetes proporciona diccionarios de configuración (ConfigMaps) y diccionarios de secretos (Secrets). A través de la vista de configuración, es posible editar y administrar objetos de configuración, así como ver información sensible oculta.

6) Vista de registros
Las páginas de lista y detalles de los Pods proporcionan enlaces a la vista de registros. A través de la vista de registros, no solo se pueden ver los registros de los Pods, sino también los registros de los contenedores de los Pods. Mediante el Dashboard, se pueden crear y desplegar aplicaciones contenerizadas mediante un asistente, o también se puede crear una aplicación manualmente ingresando información específica de la aplicación, o cargando archivos YAML y JSON.

2. Despliegue de aplicaciones

1) Creación manual de aplicaciones
Al crear y desplegar aplicaciones contenerizadas mediante el asistente, se deben proporcionar la siguiente información:
Nombre de la aplicación (App name obligatorio): El nombre de la aplicación que se va a desplegar. Una etiqueta con este valor se agregará al despliegue y al servicio. En el namespace de Kubernetes actual, el nombre de la aplicación debe ser único. Además, el nombre debe comenzar con una letra minúscula y terminar con una letra minúscula o un número, y puede contener letras, números y "-". La longitud máxima del nombre es de 24 caracteres.
Número de Pods (Number of pods obligatorio): La cantidad de Pods que se desea desplegar. El valor debe ser un número entero.
Descripción (Description): Una descripción de la aplicación que se agregará a las anotaciones del despliegue y se mostrará en los detalles de la aplicación.
Etiquetas (Labels): Las etiquetas predeterminadas de la aplicación son su nombre y versión. Se pueden especificar otras etiquetas que se aplicarán a recursos como despliegues, servicios, Pods, etc.
Namespace: En el mismo clúster físico, Kubernetes admite múltiples clústeres virtuales. Estos clústeres virtuales se denominan namespaces. A través de los namespaces, los recursos se pueden dividir lógicamente. A través del menú desplegable se pueden seleccionar namespaces existentes, o también se puede crear un nuevo namespace. La longitud máxima del nombre de un namespace es de 63 caracteres, y puede usar letras, números y "-", pero no puede contener letras mayúsculas, ni puede consistir solo en números.
Secreto de extracción de imagen (Image Pull Secret): Si la imagen del contenedor Docker es privada, es posible que se requieran certificados de seguridad. El Dashboard proporciona todos los secretos disponibles a través de un menú desplegable, y también permite crear nuevos secretos. El nombre del secreto debe seguir la sintaxis de nombres de dominio DNS, por ejemplo: new.image-pull.secret. El contenido del secreto debe estar encriptado con base64 y especificarse en el archivo .dockercfg. La longitud máxima del nombre del secreto no puede superar los 253 caracteres.
Variables de entorno (Environment variables): Kubernetes expone servicios a través de variables de entorno. Se pueden crear variables de entorno o usar sus valores para pasar parámetros a comandos. Las variables de entorno pueden ser utilizadas por las aplicaciones para descubrir servicios, y sus valores pueden ser referenciadas por otras variables mediante la sintaxis $(VAR_NAME).<br></br>
2)<strong> Crear aplicaciones cargando archivos YAML o JSON</strong>
Mediante herramientas de compilación, se pueden escribir archivos YAML y JSON para aplicaciones contenerizadas, y en la interfaz de usuario del Dashboard se pueden crear y desplegar aplicaciones cargando estos archivos.

Resumen simple de los pasos de despliegue:

1. <strong>Despliegue</strong>:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
2. <strong>Cambiar el tipo de Service a NodePort</strong>
kubectl patch svc kubernetes-dashboard -p '{"spec":{"type":"NodePort"}}' -n kube-system
3. <strong>Autenticación</strong>:
La cuenta para la autenticación debe ser un ServiceAccount: utilizada por el pod del Dashboard para autenticarse en Kubernetes;
    token:
        (1) Crear un ServiceAccount, según su objetivo de gestión, usar rolebinding o clusterrolebinding para enlazar a un role o clusterrole adecuado;
        (2) Obtener el secret de este ServiceAccount, ver sus detalles detallados, donde estará el token;
    kubeconfig: encapsular el token del ServiceAccount en un archivo kubeconfig
        (1) Crear un ServiceAccount, según su objetivo de gestión, usar rolebinding o clusterrolebinding para enlazar a un role o clusterrole adecuado;         
        (2) kubectl get secret | awk '/^ServiceAccount/{print $1}'
             KUBE_TOKEN=$(kubectl get secret SERVCIEACCOUNT_SERRET_NAME -o jsonpath={.data.token} |base64 -d)
        (3) Generar el archivo kubeconfig
            kubectl config set-cluster --kubeconfig=/RUTA/A/ARCHIVO
            kubectl config set-credentials NOMBRE --token=$KUBE_TOKEN --kubeconfig=/RUTA/A/ARCHIVO
            kubectl config set-context
            kubectl config use-context

Etiquetas: Kubernetes dashboard autenticación rbac service-accounts

Publicado el 6-7 07:10