Kubernetes - Exponer múltiples puertos bajo el mismo dominio

epic

Pro
Se incorporó
11 Febrero 2007
Mensajes
846
Hola a todos.... estaba buscando , pero no encuentro como exponer mas de 1 puerto cuando la petición viene del mismo dominio en un Ingress. Hay algunos post viejos que dicen como, pero apunta a una versión deprecated de la apiVersion del ingress y con la "apiVersion: networking.k8s.io/v1" no funca.

Tengo esto hasta el momento:

ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nurseview-ingress
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/backend-path-prefix: "/"
appgw.ingress.kubernetes.io/ssl-redirect: "true"
appgw.ingress.kubernetes.io/appgw-ssl-certificate: "cert-domain.cl"
spec:
rules:
- host: dominio.cl
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nurseview-service
port:
number: 80

nurseview_svc.yaml
apiVersion: v1
kind: Service
metadata:
name: nurseview-service
spec:
selector:
app: nurseview
ports:
- protocol: TCP
port: 80
targetPort: 80
type: ClusterIP

Y cuando hago login en https://dominio.cl... esta por debajo va a https://dominio.cl:7999/login , y ahí se queda y se queda y se queda y se queda xD

Necesito que se vaya al otro servicio:
apiVersion: v1
kind: Service
metadata:
name: other-service
spec:
selector:
app: myapp
ports:
- protocol: TCP
port: 7999
targetPort: 7999
type: ClusterIP

PD: Esta en Azure.

:fuuu:fuuu:fuuu
 

true

Pro
Se incorporó
18 Noviembre 2006
Mensajes
735
no soy experto en el tema, pero me parece que podrías tener un balanceador de carga entre medio? un nginx o algo como traefik?
 
Upvote 0

epic

Pro
Se incorporó
11 Febrero 2007
Mensajes
846
Al parecer Ingress no maneja puertos arbitrarios, solo maneja http y https ... osea en la URL al parecer no puede llegar un dominio.cl:6700 porque no lo va a tomar, se va a quedar ahí pensando de por vida. Estaba pensando dejar ese ingress.yaml con otro "- host" abajo del que ya existe, en el puerto 80 , pero luego redireccionando al interno :fuuu ... haré mas pruebas, no se que vaya a pasar :plaf2

Dejar aparte ese services en un LoadBalance y una public ip entra pero tampoco sirve, ya que el LoadBalancer no maneja certificados ssl y terminarían entrando con http o de igual forma incorporar un mecanismo de nivel superior como un ingress.
 
Upvote 0

pinorrea

Miembro Activo
Se incorporó
20 Noviembre 2014
Mensajes
4
no te sirvió creando otro rule en el mismo ingress para el servicio other-service? Annotations - Application Gateway Ingress Controller (azure.github.io)

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ad-server-ingress
namespace: commerce
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/waf-policy-for-path: "/subscriptions/abcd/resourceGroups/rg/providers/Microsoft.Network/applicationGatewayWebApplicationFirewallPolicies/adserver"
spec:
rules:
- http:
paths:
- path: /
backend:
serviceName: nurseview-service
servicePort: 80

- path: /login
login:
serviceName: other-service
servicePort: 7999
 
Upvote 0

epic

Pro
Se incorporó
11 Febrero 2007
Mensajes
846
no te sirvió creando otro rule en el mismo ingress para el servicio other-service? Annotations - Application Gateway Ingress Controller (azure.github.io)

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ad-server-ingress
namespace: commerce
annotations:
kubernetes.io/ingress.class: azure/application-gateway
appgw.ingress.kubernetes.io/waf-policy-for-path: "/subscriptions/abcd/resourceGroups/rg/providers/Microsoft.Network/applicationGatewayWebApplicationFirewallPolicies/adserver"
spec:
rules:
- http:
paths:
- path: /
backend:
serviceName: nurseview-service
servicePort: 80

- path: /login
login:
serviceName: other-service
servicePort: 7999
uhm... se me habia olviado que habia puesto este post....

pero esa politica es de seguridad, no se si vaya hacer lo que necesito.... pondre mas abajo lo que llevo hecho ya que el proyecto aun continua.
 
Upvote 0

epic

Pro
Se incorporó
11 Febrero 2007
Mensajes
846
Al final como el proyecto aun continua en desarrollo cada semana hay cambios :S

lo que hice fue lo siguiente por si a alguien mas le sirve y que por el momento me esta sirviendo, pero no se si tenga que hacer algunos cambios a medida que vayan pasando nuevos release de la aplicación.

En principio si se puede trabajar con puertos que no sean 80 y 443, pero se deben agregar unas "annotations" en el yaml del ingress y en ese mismo yaml tuve que crear 2-3 "kind: Ingress" ya que las annotations son para todo el cuerpo del "spec"... por lo tato cree 3 entradas de ingress, uno porra cada puerto que tenia que ir en la url del navegador:

annotations:
appgw.ingress.kubernetes.io/override-frontend-port: "7999"
appgw.ingress.kubernetes.io/health-probe-status-codes: "200-499"
(y el resto de lineas)

**** utilice el "health-probe-status-codes" ya que el Probe me estaba arrojando error y no me dejaba "aceptable" el contenedor y por el lado del desarrollo estaba complicado solucionarlo, por lo tanto puse ese rango y paso ok.

Luego mandar la solicitud al servicio "a" por el puerto 80

en el yaml del servicio "a" escuchar la solicitud en el 80 y enviarlo al 7999
ports:
- name: api-7999
protocol: TCP
port: 80
targetPort: 7999

y el deployment del contenedor dee estar escuchando en el puerto 7999
ports:
- containerPort: 7999

Con esto si por ejemplo yo pongo midominio.cl:7999/login ... lo manda al contenedor indicado.

Y como tenia 3 puertos en total de los cuales los otros 2 era de websocket estoy intentando crear un kind: ingress para cada uno con un "appgw.ingress.kubernetes.io/override-frontend-port" para cada puerto y un "appgw.ingress.kubernetes.io/health-probe-path: "/probe" ya que ahi responde con el codigo correcto para dar como "aceptado" al contenedor.

esta ultima parte la tengo que probar bien aun ya que todavia no la tengo levantada al 100%



Por si alguien sabe de alguna solución, la conexión de los websocket se me cae a los 30 segundos exactos.... esto sucede solamente al tenerlo bajo el appgw de azure, si tengo esto en un docker en local o cualquier lado no se cae. <--- Esta parte ya esta solucionada ;)
 
Última modificación:
Upvote 0
Subir