Estoy luchando con la configuración de ingreso que permitirá la accesibilidad desde dos rutas diferentes a los servicios que se implementan en diferentes espacios de nombres .
1# Entrada:
# Source: deployment/templates/ingress.yaml apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: portal-api labels: helm.sh/chart: deployment-0.1.0 app.kubernetes.io/name: deployment app.kubernetes.io/instance: portal-api app.kubernetes.io/version: "0.0.1" app.kubernetes.io/managed-by: Helm annotations: certmanager.k8s.io/acme-challenge-type: http01 certmanager.k8s.io/cluster-issuer: letsencrypt-prod kuberentes.io/tls-acme: "true" kubernetes.io/ingress.class: nginx spec: tls: - hosts: - "example.com" secretName: portal-certificate rules: - host: "example.com" http: paths: - path: /api/rest/(.*) backend: serviceName: portal-api servicePort: 80 # Source: deployment/templates/ingress.yaml apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: portal-ui labels: helm.sh/chart: deployment-0.1.0 app.kubernetes.io/name: deployment app.kubernetes.io/instance: portal-ui app.kubernetes.io/version: "0.0.1" app.kubernetes.io/managed-by: Helm annotations: certmanager.k8s.io/acme-challenge-type: http01 certmanager.k8s.io/cluster-issuer: letsencrypt-prod kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/rewrite-target: /$1 spec: tls: - hosts: - "example.com" secretName: portal-certificate rules: - host: "example.com" http: paths: - path: /(.*) backend: serviceName: portal-ui servicePort: 80Enrutamiento para la ruta example.com: funciona, se redirige a portal-ui. Enrutamiento para la ruta example.com/api/rest/(something): no funciona, se redirige al servicio portal-ui.
Creo que funcionará en el mismo espacio de nombres... Pero necesito dos espacios de nombres para cada servicio.
Como mencionó @Arghya Sadhu
El ingreso y su servicio correspondiente deben estar en el mismo espacio de nombres; de lo contrario, el ingreso no puede descubrir puntos finales del servicio.
Hay un problema de github abierto desde 2015 y todavía se discute cómo hacer que funcione.
Por ahora es crear ingreso en el mismo espacio de nombres
Ejemplo hecho por el miembro de github @aledbf
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: component1 namespace: component1 spec: rules: - host: domain.com http: paths: - backend: serviceName: component1 servicePort: 80 path: /component1 apiVersion: extensions/v1beta1 kind: Ingress metadata: name: component2 namespace: component2 spec: rules: - host: domain.com http: paths: - backend: serviceName: component2 servicePort: 80 path: /component2O
Puede probar la solución hecha por el miembro del problema de github @chestack
mi solución:
servicioA en el espacio de nombresA
crear servicioB en el espacio de nombresB
spec: ... type: ExtertalName externalName: serviceA.namespaceA.svc.cluster.localagregue la regla de ingreso en ingresoB en el espacio de nombresB
- path: /**** backend: serviceName: serviceB servicePort: ***El ingreso y su servicio correspondiente deben estar en el mismo espacio de nombres; de lo contrario, el ingreso no puede descubrir puntos finales del servicio. Entonces cree ingreso1, servicio1 en el espacio de nombres1 e ingreso2, servicio2 en el espacio de nombres2.