Estoy haciendo la terminación SSL usando Ingress para el tráfico HTTPS. Pero también quiero lograr lo mismo para Custom Port (host virtual http). Por ejemplo, https://example.com:1234 debería ir a http://example.com:1234
Nginx Ingress tiene un ConfigMap donde podemos exponer puertos personalizados. Pero la terminación SSL no funciona aquí.
Cualquier trabajo alrededor? Me pregunto si podría redirigir los https entrantes usando .htaccess en su lugar.
apiVersion: v1 kind: ConfigMap metadata: name: tcp-services namespace: ingress-nginx data: 1234: "test-web-services/httpd:1234" --- apiVersion: v1 kind: Service metadata: name: ingress-nginx namespace: ingress-nginx labels: app.kubernetes.io/name: ingress-nginx app.kubernetes.io/part-of: ingress-nginx spec: externalTrafficPolicy: Local type: LoadBalancer selector: app.kubernetes.io/name: ingress-nginx app.kubernetes.io/part-of: ingress-nginx ports: - name: http port: 80 protocol: TCP targetPort: http - name: port-1234 port: 1234 protocol: TCP targetPort: 1234SSL Termination para el tráfico TCP no es una función compatible directamente con nginx-ingress .
Se describe más ampliamente en este número de Github:
También puede encontrar en este hilo que algunas personas lograron implementar una solución alternativa que les permitió admitir la terminación de SSL con servicios TCP . Específicamente:
Como su ejemplo presentaba la "rebaja" de la comunicación HTTPS a HTTP , podría ser beneficioso agregar que puede modificar la forma en que NGINX Ingress Controller se conecta a su backend . Permítanme elaborar sobre eso.
Considere esto como una solución alternativa:
De manera predeterminada, su controlador de NGINX Ingress Controller se conectará a su backend con HTTP . Esto se puede cambiar con la siguiente anotación:
nginx.ingress.kubernetes.io/backend-protocol:Citando la documentación oficial:
Es posible usar anotaciones de protocolo de back-end para indicar cómo NGINX debe comunicarse con el servicio de back-end. (Reemplaza backends seguros en versiones anteriores) Valores válidos: HTTP, HTTPS, GRPC, GRPCS, AJP y FCGI
Por defecto, NGINX usa HTTP.
En este ejemplo particular, la ruta de la solicitud será la siguiente:
client -- (HTTP S :443) --> Ingress controller de entrada (Terminación TLS) -- (HTTP: puerto de servicio) --> Service ----> Pod Puede utilizar el Service de tipo LoadBalancer para enviar el tráfico desde el puerto 1234 al 80 de su 443 de Ingress Controller . Esto facilitaría mucho la terminación de TLS , pero obligaría al cliente a usar solo un protocolo. Por ejemplo:
- name: custom port: 1234 protocol: TCP targetPort: 443 Este extracto del Service nginx-ingress podría usarse para reenviar el tráfico HTTPS a su Ingress Controller de entrada, donde la solicitud terminaría con TLS terminated y se reenviaría como HTTP a su backend . Forzar el HTTP a través de ese puerto arrojaría el código de error 400: Bad request .
En este ejemplo particular, la ruta de la solicitud será la siguiente:
client -- (HTTP S :1234) --> Ingress controller de entrada (Terminación TLS) -- (HTTP:puerto-servicio) --> Service ----> Pod