Preaparando el Acceso
Una vez hemos desplegado un cluster con flannel…
Veremos que aunque pongamos los servicios en type LoadBalancer no se asigna ninguna ip externa y aunque se la pongamos manualmente no podemos llegar a ella.
La documentación que hay sobre Ingress controller sirve para configurara en los proveedores aws google azure… que expongamos el servicio y asignemos una ip no es suficiente dado que ni flannel ni kubernetes se encargan de la configuración y conexión con redes externas. Afortunadamente existe MetalLB que se encargara de esta tarea por nosotros
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.10.3/manifests/namespace.yaml kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.10.3/manifests/metallb.yaml
Crear el manifiesto de configuracion, en este ejemplo otorgaremos 10 ip a Metallb
vi metallb-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 192.168.1.240-192.168.1.250
kubectl create -f metallb-configmap.yaml
Crear un certificado ssl para el dashboard
Antes de desplegar el dashboard vamos crear un certificado y añadirlo como secreto para que sustituya al que se despliega por defecto pues solo response al domain localhost y no vamos a usar este dominio. En vez de localhost usaremos dashboard
mkdir $HOME/certs cd $HOME/certs openssl genrsa -out dashboard.key 2048 openssl rsa -in dashboard.key -out dashboard.key openssl req -sha256 -new -key dashboard.key -out dashboard.csr -subj '/CN=dashboard' openssl x509 -req -sha256 -days 365 -in dashboard.csr -signkey dashboard.key -out dashboard.crt
Creamos elnamespaces y el secreto
kubectl create namespace kubernetes-dashboard
kubectl -n kubernetes-dashboard create secret generic kubernetes-dashboard-certs --from-file=$HOME/certs
Desplegar el dashboard
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml
A continuacion tenemos que editar el servicio del dashboard y cambiar el type de ClusterIP a LoadBalancer
kubectl -n kubernetes-dashboard edit service kubernetes-dashboard
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
kind: Service
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"k8s-app":"kubernetes-dashboard"},"name":"kubernetes-dashboard","namespace":"kubernetes-dashboard"},"spec":{"ports":[{"port":443,"targetPort":8443}],"selector":{"k8s-app":"kubernetes-dashboard"}}}
creationTimestamp: "2019-09-16T20:46:20Z"
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
resourceVersion: "16638"
selfLink: /api/v1/namespaces/kubernetes-dashboard/services/kubernetes-dashboard
uid: 9dc550a8-08d3-4f48-8f73-aac945142594
spec:
clusterIP: 10.111.234.76
ports:
- port: 443
protocol: TCP
targetPort: 8443
selector:
k8s-app: kubernetes-dashboard
sessionAffinity: None
type: LoadBalancer
status:
loadBalancer: {}
Esto genera una ip publica para el serivicio de dashboard, configuramos nuestro hosts para que resuelva dashboard a la ip publica generada.
kubectl -n kubernetes-dashboard get service kubernetes-dashboard
Con esto el dashboard ya seria accesible pero no tendríamos privilegios.
Creando el rol dashboard-admin
nano admin-user.yaml
apiVersion: v1 kind: ServiceAccount metadata: name: admin-user namespace: kubernetes-dashboard
kubectl create -f admin-user.yaml
nano cluster-role.yaml
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: admin-user roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: admin-user namespace: kubernetes-dashboard
kubectl create -f cluster-role.yaml
Copiar el token de acceso
kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')
Una vez hemos confiurado nuestro archivo host en local para que resuelta la ip publica 192.168.1.240 a dashboard
ingresar en el navegador https://dashboard y copiar el token la pagina de login
0 comentarios