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

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

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

dashboard-deployment

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

Deja una respuesta

Marcador de posición del avatar

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *