Skip to main content

NGINX

image.png

Manifiesto para Nginx en el Namespace "nginx" + PVC (ceph-rbd SotorageClass)+ Deployment + Servicio + TLS Ingress + Certificado

---
# 0. Namespace
apiVersion: v1
kind: Namespace
metadata:
  name: nginx
---
# 1. PersistentVolumeClaim (Ceph RBD)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nginx-pvc
  namespace: nginx
spec:
  storageClassName: ceph-rbd  # Nombre de tu StorageClass Ceph
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi  # Ajusta el tamaño según necesites
---
# 2. Deployment de NGINX con volumen persistente
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: nginx
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
        volumeMounts:
        - name: nginx-storage
          mountPath: /usr/share/nginx/html  # Montamos en la carpeta de contenido
        - name: nginx-config
          mountPath: /etc/nginx/conf.d/default.conf
          subPath: default.conf
      volumes:
      - name: nginx-storage
        persistentVolumeClaim:
          claimName: nginx-pvc
      - name: nginx-config
        configMap:
          name: nginx-config
---
# 3.2. ConfigMap para NGINX
apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-config
  namespace: nginx
data:
  default.conf: |
    server {
      listen 80;
      server_name _;
      location / {
        root /usr/share/nginx/html;
        index index.html;
      }
    }
---
# 4.3. Service (ClusterIP)
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  namespace: nginx
spec:
  type: ClusterIP
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
---
# 5.4. Ingress con TLS
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-ingress
  namespace: nginx
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt-staging
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  tls:
  - hosts:
    - nginx.example.com  # Cambia por tu dominio
    secretName: nginx-tls-staging
  rules:
  - host: nginx.example.com  # Cambia por tu dominio
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx-service
            port:
              number: 80