Instalando servicios en un cluster de Tanzu

VMware Tanzu clusters, a diferencia de otras soluciones, despliega cluster de Kubernetes sin servicios preinstalados. Somos nosotros los que decidimos qué servicios van en cada cluster. Si no contamos con herramientas como Tanzu Mission Control, el desplieque de los servicios de infraestructura requiere de un poco de conocimiento. En este articulo (y los siguientes) voy a documentar cómo desplegar algunos de los servicios más instalados en los clusters.

Helm y Bitnami


Para la mayoría de los servicios estoy usando Helm y los servicios, si están disponibles, los obtengo desde el repositorio de Bitnami que contiene las imágenes curadas por VMware.

Una vez instalado Helm, agregamos el repositorio de Bitnami:
helm repo add bitnami https://charts.bitnami.com/bitnami

Cert-Manager y Countour

Probablemente el primer servicios que necesitamos en todos los clusters es el de "Ingress" para exponer nuestras aplicaciones con un balanceador capa 7. VMware recomienda el proyecto Contour y este requiere del servicio Cert-Manager que nos provee de certificados.

Luego de conectarnos a nuestro cluster con "kubectl vsphere login", instalamos Cert-Manager:

helm install -n cert-manager cert-manager bitnami/cert-manager --set installCRDs=true --create-namespace

Ahora podemos instalar Contour:

helm install -n system-ingress contour bitnami/contour --create-namespace

Probando los servicios

Hay muchas formas de utilizar estos servicios, pero para probar que funcionan correctamente, yo hago lo siguiente:
# creamos el namespace
kubectl create ns test

# creamos el issuer 
kubectl apply -f - <<EOF
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
  name: test-issuer
  namespace: test
spec:
  selfSigned: {}
EOF

# creamos el certificado
kubectl apply -f - <<EOF
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: test-tls
  namespace: test
spec:
  dnsNames:
  - '*.default.svc.cluster.local'
  - '*.default'
  issuerRef:
    name: test-issuer
  secretName: test-tls-secret
EOF

# es un test por lo que deshabilito Pod Security
kubectl label --overwrite ns test \
  pod-security.kubernetes.io/enforce=privileged \
  pod-security.kubernetes.io/enforce-version=latest \
  pod-security.kubernetes.io/warn=baseline \
  pod-security.kubernetes.io/warn-version=latest \
  pod-security.kubernetes.io/audit=baseline \
  pod-security.kubernetes.io/audit-version=latest

# desplegamos nginx
kubectl -n test create deploy nginx --image=nginx:1.27.3-alpine

# creamos el servicio
kubectl -n test expose deploy nginx --port=80

# creamos el ingress
kubectl apply -f - <<EOF
apiVersion: projectcontour.io/v1
kind: HTTPProxy
metadata:
  name: test-ingress
  namespace: test
spec:
  virtualhost:
    fqdn: nginx.gitops.playground.net
    tls:
      secretName: test-tls-secret
  routes:
    - conditions:
      - prefix: /
      services:
        - name: nginx
          port: 80
EOF

# obtenemos la IP del ingress (siempre será la misma para este cluster)
kubectl -n system-ingress get svc contour-envoy | awk '{print $4}'
Listo, si configuramos nuestro archivo "hosts" con el fqdn que pusimos en el ingress apuntando a la IP de del ingress, ya podemos navegar nuestro nginx con certificado autofirmado.


¡Saludos!

Comentarios

Entradas populares de este blog

vRA8 - Definir redes disponibles por Projecto

Aria Automation - crear lista ordenada de key-value en custom forms con Orchestrator