Tengo dos aplicaciones: app1
y app2
. Cada uno alojado en un repositorio separado. Cada uno está completamente desvinculado entre sí. Me gustaría:
Mi enfoque actual es tener un archivo yaml
por cada aplicación, que describa Deployment
, Service
e Ingress
. Estoy usando nginx para administrar la parte de ingreso.
app1.yaml
contiene la siguiente especificación de ingreso:
--- apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: app1-ingress annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/proxy-read-timeout: "1800" nginx.ingress.kubernetes.io/proxy-send-timeout: "1800" nginx.ingress.kubernetes.io/rewrite-target: /$2 nginx.ingress.kubernetes.io/configuration-snippet: | rewrite ^(/apps/app1)$ $1/ redirect; # ZZZ spec: rules: - host: myhost http: paths: - path: /apps/app1(/?)(.*) backend: serviceName: app1-service servicePort: 8080
app2.yaml
contiene el equivalente exacto, con las entradas correspondientes modificadas. Cuando quiero implementar app1
, entro en su repositorio y hago lo siguiente:
kubectl apply -f app1.yaml
Cuando quiero implementar app2
, entro en su repositorio y hago:
kubectl apply -f app2.yaml
La alternativa es tener app1.yaml
y app2.yaml
simplemente definiendo el servicio y luego tener un archivo adicional que contenga la especificación de Ingress:
--- apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: ingress annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/proxy-read-timeout: "1800" nginx.ingress.kubernetes.io/proxy-send-timeout: "1800" nginx.ingress.kubernetes.io/rewrite-target: /$2 nginx.ingress.kubernetes.io/configuration-snippet: | rewrite ^(/apps/.*)$ $1/ redirect; # ZZZ spec: rules: - host: myhost http: paths: - path: /apps/app1(/?)(.*) backend: serviceName: app1-service servicePort: 8080 paths: - path: /apps/app2(/?)(.*) backend: serviceName: app2-service servicePort: 8080
Supongamos que voy a agregar más y más aplicaciones app3
, app4
, etc. en el futuro.
Mi pregunta es: ¿son estos dos estilos de especificación equivalentes o se prefiere un estilo por razones técnicas o de mejores prácticas?
Su pregunta se basa bastante en la opinión y es imposible dar una respuesta inequívoca.
Según mi experiencia, es mejor usar el ingreso por un servicio. Durante un período de tiempo más largo, es cómodo: imagine que un día necesita agregar/cambiar algunas anotaciones en el ingreso relacionadas con un servicio específico o grupo de servicios; deberá dividir su ingreso en pocos archivos. Creará un lío. Por eso es mejor mantener separadas las definiciones de ingreso, especialmente si tiene aplicaciones alojadas en diferentes repositorios.
También verifique esta pregunta (se trata de hosts, no de rutas, pero es muy similar a su pregunta). Puede encontrar aquí mucha información útil.