Soy Oscar Mas y en posts anteriores os he explicado como poder desplegar pods sin seguridad mediante el API que nos ofrece Kubernetes. Existen varias posibilidades de acceder a las APIs de Kubernetes mediante seguridad, una de estas formas es la utenticación por Token. El único inconveniente que existe actualmente en este sistema es que cada vez que queramos añadir un nuevo Token, tendremos que reiniciar los servicios del pod que hemos deplegado.
Existen diferentes posibilidades de acceso por API a Kubernetes como pueden ser: usando certificados ( X509 Client Certs ), usando un Token ( Static Token File ), usando usuario y contraseña ( Static Password File ), etc.
La autenticación de Kubernetes se basa en dos fases:
- Autenticación: es la fase donde nos permite el acceso
- Autorización: es la fase donde seleccionamos que puede hacer una vez autenticado
Para que lo veamos más sencillo, lo he dividido en dos partes.
Autenticación
En esta fase crearemos un Token y le asignaremos un usuario. De esta manera en la fase de autorización le podremos asignar los permisos que deseemos a nuestro usuario.
root@ub-nodo0-sbd:~# cat /etc/kubernetes/token/tokenauth.csv 31ada4fd-adec-460c-809a-9e56ceb75269,oscarmas,oscarmas
Modificaremos nuestro fichero de configuración de Kubernetes, para indicarle que usaremos el sistema de Token:
root@ub-nodo0-sbd:~# vim /etc/kubernetes/manifests/kube-apiserver.yaml
- --token-auth-file=/etc/kubernetes/token/tokenauth.csv
kind: Pod
metadata:
name: kube-apiserver
spec:
containers:
- name: kube-apiserver
command:
- ...
- --token-auth-file=/etc/kubernetes/token
volumeMounts:
- mountPath: /etc/kubernetes/token
name: token-kubernetes
readOnly: true
volumes:
- hostPath:
path: /etc/kubernetes/token
name: token-kubernetes
Reiniciaremos los servicios de Kubernetes para poder aplicar los cambios que hemos realizado.
root@ub-nodo0-sbd:~# systemctl restart kubelet root@ub-nodo0-sbd:~# kubectl get nodes
Autorización
En esta fase le asignaremos los permisos al usuario que hemos creado anteriormente con el Token. En este caso le he dado acceso a todos los servicios para hacerlo más sencillo. Para ello crearemos un Role y un RoleBinding donde le indicaremos los permisos y el usuario:
root@ub-nodo0-sbd:~# cat oscarmas-allow.yaml kind: Role apiVersion: rbac.authorization.k8s.io/v1beta1 metadata: namespace: default name: oscarmas-role rules: - apiGroups: ["*"] resources: ["*"] verbs: ["*"] --- kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1beta1 metadata: name: oscarmas-rolebinding namespace: default subjects: - kind: User name: oscarmas apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: oscarmas-role apiGroup: rbac.authorization.k8s.io
Una vez creado nuestro yaml de configuración lo aplicaremos y verificaremos lo que se hayan aplicado los cambios:
root@ub-nodo0-sbd:~# kubectl create -f oscarmas-allow.yaml root@ub-nodo0-sbd:~# kubectl get role root@ub-nodo0-sbd:~# kubectl get rolebinding
Configuraremos nuestro postman, para poder acceder a la plataforma de Kubernetes mediante Token tal y como se indica en la siguiente captura:
No te pierdas la serie completa sobre Kubernetes de Oscar Mas:
- Kubernetes – Introducción a Kubernetes
- Kubernetes – Instalación
- Kubernetes – RollingUpdate con Kubernetes
- Kubernetes – Dashboard
- Kubernetes – Volúmenes NFS
- Kubernetes – Registry
- Kubernetes – Traefik
- Kubernetes – Systemd con Traefik y Proxy de Kubernetes
- Kubernetes – Heapster Influx Grafana
- Kubernetes – Labels de Kubernetes
- Kubernetes – API: Swagger
- Kubernetes – API: Creando nuestro primer POD
- Kubernetes – API: Seguridad con Token


hola Jorge y desde ya gracias por el aporte. He seguido la guia tal cual la has descripto pero no puedo realizar la conexion mediante postman, el error es “Could not get any response”.
Por otro lado, como podria probar el acceso con este usuario y certificado desde Kubectl?
Saludos