Skip to main content

Addons

image.png

MicroK8s utiliza el mínimo de componentes para un Kubernetes puro y ligero. Sin embargo, hay muchas funciones adicionales disponibles  "addons" que son componentes preconfigurados que proporcionarán capacidades adicionales.

El complemento «hostpath-storage» proporciona espacio de directorio en el host. No se usa en cluster

Dashboard

image.png

El panel estándar de Kubernetes es una forma conveniente de realizar un seguimiento de la actividad y el uso de recursos de MicroK8.

# Instala el Addon
microk8s enable dashboard
Acceso

Por defecto el acceso es validado con un token. El servicio se expone como ClusterIP y para exponerlo fuera del clúster hacemos un port-forward

# Genera un token para validarte en el Dashboard
microk8s kubectl create token default

# Redirige un puerto del host para poder acceder al dashboard
microk8s kubectl port-forward -n kube-system service/kubernetes-dashboard 10443:443 --address 0.0.0.0

Ahora se puede acceder a Dashboard desde https://<IP_Nodo>:10443

Para cambiar el acceso y acceder mediante NodePort 

# Comprueba el servicio
microk8s kubectl -n kube-system  get svc kubernetes-dashboard

# Edita el servicio
microk8s kubectl -n kube-system edit svc kubernetes-dashboard

Cambia el type ClusterIP por NodePort

spec:
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30000 # añade este línea si quieres un puerto especifico
      
  type: NodePort # cambia el tipo

Ahora se puede acceder a Dashboard desde https://<IP_Nodo>:<NodePort

Validación con usuario

dashboard/docs/user/access-control/creating-sample-user.md at master · kubernetes/dashboard · GitHub

vi dashboard-adminuser.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kube-system
---
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: kube-system
---
apiVersion: v1
kind: Secret
metadata:
  name: admin-user
  namespace: kube-system
  annotations:
    kubernetes.io/service-account.name: "admin-user"
type: kubernetes.io/service-account-token
# aplicar manifiesto
kubectl apply -f dashboard-adminuser.yaml

# Obtener el token de acceso
kubectl get secret admin-user -n kube-system -o jsonpath={".data.token"} | base64 -d

Ingress

image.png

Este complemento añade un controlador de entrada NGINX para MicroK8. Se habilita ejecutando el comando:

microk8s enable ingress

Con Ingress habilitado, se puede crear una regla de tipo "ingress" HTTP/HTTPS. por ejemplo:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: http-ingress
spec:
  rules:
  - http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: some-service
            port:
              number: 80

Cert-Manager

image.png

Cert-Manager es la solución estándar para la gestión de certificados en clústeres de Kubernetes. Se habilita ejecutando el comando:

microk8s enable cert-manager

ClusterIssuer

Se utiliza un recurso ClusterIssuer para configurar una cuenta con Let's Encrypt. Solo necesita una dirección de correo electrónico (asegúrese de usar una válida).Global -> para todo el clúster

  • Se aplica una sola vez y puedes usarlo en cualquier namespace.

  • Ideal para producción cuando quieres certificados automáticos a nivel de clúster.

Manifiesto "letsencrypt-staging.yaml"

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-staging
spec:
  acme:
    # The ACME server URL
    server: https://acme-staging-v02.api.letsencrypt.org/directory
    # Email address used for ACME registration
    email: user@example.com
    # Name of a secret used to store the ACME account private key
    privateKeySecretRef:
      name: letsencrypt-staging
    # Enable the HTTP-01 challenge provider
    solvers:
      - http01:
          ingress:
            class: public

Manifiesto "letsencrypt-prod.yaml":

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    # The ACME server URL
    server: https://acme-v02.api.letsencrypt.org/directory
    # Email address used for ACME registration
    email: user@example.com
    # Name of a secret used to store the ACME account private key
    privateKeySecretRef:
      name: letsencrypt-prod
    # Enable the HTTP-01 challenge provider
    solvers:
      - http01:
          ingress:
            class: public
# ClusterIssuer test
kubectl apply -f letsencrypt-staging.yaml

# ClusterIssuer Producción
kubectl apply -f letsencrypt-prod.yaml

Comprobación

# Lista ClusterIssuers
kubectl get clusterissuer

# Obtener detalles del ClusterIssuer
kubectl describe clusterissuer letsencrypt-staging
kubectl describe clusterissuer letsencrypt-prod