Saltar al contenido

cómo redirigir http a https mediante un controlador de entrada de kubernetes en Amazon EKS

Solución:

Necesitas usar el nginx.ingress.kubernetes.io/force-ssl-redirect: "true" anotación:

Cuando se utiliza la descarga de SSL fuera del clúster (por ejemplo, AWS ELB), puede resultar útil aplicar un redireccionamiento a HTTPS incluso cuando no hay ningún certificado TLS disponible. Esto se puede lograr utilizando el
nginx.ingress.kubernetes.io/force-ssl-redirect: "true" anotación en el recurso particular.

¡Pude hacer que funcionara! básicamente modifiqué los archivos ingress.yaml y service.yaml

ingress.yaml se ve así:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: metabase
  namespace: bigdata
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:us-east-2:***:certificate/****
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]'
    alb.ingress.kubernetes.io/actions.ssl-redirect: '{"Type": "redirect", "RedirectConfig": { "Protocol": "HTTPS", "Port": "443", "StatusCode": "HTTP_301"}}'
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/group: metabase # name of my app

  labels:
    app: metabase

spec:
  rules:
    - http:
        paths:
          - path: /*
            backend:
              serviceName: ssl-redirect
              servicePort: use-annotation
          - path: /*
            backend:
              serviceName: metabase
              servicePort: 443

y mi servicio se ve así:

apiVersion: v1
kind: Service
metadata:
  name: metabase
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:us-east-2:***:certificate/***
  namespace: bigdata
  labels:
    app: metabase
spec:
  ports:
    - name: https
      protocol: TCP
      port: 443
      targetPort: http-server
    - name: http
      protocol: TCP
      port: 80
      targetPort: http-server
  selector:
    app: metabase
  type: LoadBalancer

He pasado bastante tiempo tratando de hacer que esto funcione y finalmente lo logré. Probablemente alguien lo encontrará útil. Intentaré describir el enfoque paso a paso para configurar ALB con HTTP a redirección HTTP.

  1. Verifique que su controlador ALB esté en funcionamiento:
kubectl get deployment -n kube-system aws-load-balancer-controller

La impresión debe ser similar a la siguiente:

NAME                           READY   UP-TO-DATE   AVAILABLE   AGE
aws-load-balancer-controller   1/1     1            1           18h

Si su controlador no funciona, no se creará ningún Load Balancer.

  1. Verifique que su archivo yaml sea bueno. A continuación, proporciono un archivo Yaml simple que funcionó en mi caso. Algunos comentarios sobre este archivo:
    a) Utilice el ARN de su certificado SSL / TLS (yo usé XXXXXXX).
    b) Utilice su imagen (yo utilicé YYYYYYYYYY). La imagen de mi contenedor se almacena en el ECR (Elastic Container Registry).
    c) Tenga en cuenta que un servicio extraño marcado ssl-redirect con servicePort:
    use-annotations se crea de acuerdo con la especificación de anotaciones.
    https://kubernetes-sigs.github.io/aws-load-balancer-controller/guide/ingress/annotations/

  2. Una vez que corras:
    kubectl apply -f service.yaml
    Marque dos cosas:
    a) kubectl -n default describe ingress

    Este comando debe mostrar que la reconciliación fue exitosa: el final de la impresión debe mostrar:
    Normal SuccessfullyReconciled 11s (x3 over 18m) ingress Successfully reconciled

    En la misma impresión (parte superior de la impresión) no preste atención a la entrada del registro:
    /* ssl-redirect:use-annotation (<error: endpoints "ssl-redirect" not found>)

    B) aws elbv2 describe-load-balancers --query "LoadBalancers[?contains(LoadBalancerArn,'default-nginx')].{Arn: LoadBalancerArn}" --output text | xargs -I {} aws elbv2 describe-listeners --load-balancer-arn {}

    Este comando debería mostrarle que se creó un nuevo ALB y se crearon dos Listeners. No preste atención a que el oyente HTTP no parece tener la configuración de redireccionamiento correcta.


– YAML –

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  namespace: default
  name: nginx-ingress
  annotations:
      kubernetes.io/ingress.class: alb
      alb.ingress.kubernetes.io/scheme: internet-facing
      alb.ingress.kubernetes.io/target-type: ip
      alb.ingress.kubernetes.io/tags: createdBy=aws-controller
      alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]'
      alb.ingress.kubernetes.io/actions.ssl-redirect: '{"Type": "redirect", "RedirectConfig": { "Protocol": "HTTPS", "Port": "443", "StatusCode": "HTTP_301"}}'
      alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:eu-central-1:XXXXXXXXXXXX:certificate/XXXXXXXXXXXXXXXXXXXXXXXXXX

  labels:
    app: nginx-ingress

spec:
  rules:
    - http:
        paths:
          - path: /*
            backend:
              serviceName: ssl-redirect
              servicePort: use-annotation
          - path: /*
            backend:
              serviceName: nginx-service
              servicePort: 80
---
apiVersion: v1
kind: Service
metadata:
  namespace: default
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
    - name: http
      protocol: TCP
      port: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: YYYYYYYYYYYY.dkr.ecr.eu-central-1.amazonaws.com/webfe:latest
        ports:
        - containerPort: 80
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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