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