Je suis en cours d'exécution Ingress
pour certains services sur Kubettes, et bien que les services soient réaffectés à ces IP de groupe (un peu correctement), je ne sais pas comment résoudre correctement les chemins après que ces chemins de base, par exemple, si J'ai Tomcat dans le chemin /
et nginx sur le chemin /nginx
, n'importe quel chemin Tomcat après /
ne résout pas et aucun chemin Nginx ne résolvait pas non plus pour même /
. J'ai déjà nginx.ingress.kubernetes.io/rewrite-target: /
défini dans mon ingress.yaml
:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: Tomcat-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
namespace: kube-system
spec:
rules:
- http:
paths:
- path: /
backend:
serviceName: Tomcat-deployment-service
servicePort: 8080
- path: /nginx
backend:
serviceName: nginx-deployment-service
servicePort: 80
Si Tomcat nécessite un /main.css
Fichier, par exemple, le navigateur essaierait de chercher /main.css
, mais cela retourne le default-backend
.
En outre, si j'essaie de visiter /nginx
(Tentative de frapper /
) Sur le serveur Nginx, Nginx dit /nginx
n'est pas trouvé (évidemment).
2019/03/02 08:12:04 [error] 8#8: *343 open() "/usr/share/nginx/html/nginx" failed (2: No such file or directory), client: 10.128.0.7, server: localhost, request: "GET /nginx HTTP/1.1", Host: "REDACTED_SERVER_IP"
10.128.0.7 - - [02/Mar/2019:08:12:04 +0000] "GET /nginx HTTP/1.1" 404 153 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:65.0) Gecko/20100101 Firefox/65.0" "REDACTED_CLIENT_IP, REDACTED_SERVER_IP"
10.40.1.1 - - [02/Mar/2019:08:12:05 +0000] "GET /nginx HTTP/1.1" 404 153 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:65.0) Gecko/20100101 Firefox/65.0" "REDACTED_CLIENT_IP, REDACTED_SERVER_IP"
2019/03/02 08:12:05 [error] 8#8: *344 open() "/usr/share/nginx/html/nginx" failed (2: No such file or directory), client: 10.40.1.1, server: localhost, request: "GET /nginx HTTP/1.1", Host: "REDACTED_SERVER_IP"
Comment puis-je faire des chemins après un path
dans ingress.yaml
Résolvez en considérant la partie de début du chemin tel que consulté depuis le service?
c'est à dire.
/Tomcat
, comment pourrais-je faire /Tomcat/main.css
apparaître comme /main.css
au serveur Tomcat (et ne pas résoudre à votre sauvegarde par défaut)?/nginx
, comment pourrais-je faire /nginx
apparaître comme /
au serveur Nginx (et ne pas apparaître comme /nginx
)?Je pensais que c'était ce que /rewrite-target
supposait faire.
aurais-je besoin d'utiliser des caractères génériques ou quelque chose?
Mon entrée est la suivante:
Name: Tomcat-ingress
Namespace: kube-system
Address: REDACTED_SERVER_IP
Default backend: default-http-backend:80 (10.40.0.6:8080)
Rules:
Host Path Backends
---- ---- --------
*
/ Tomcat-deployment-service:8080 (10.40.2.15:8080)
/nginx nginx-dep-ser:80 (10.40.0.26:80,10.40.1.46:80)
Annotations:
ingress.kubernetes.io/url-map: k8s-um-kube-system-Tomcat-ingress--b0fc8aa23db1001d
kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"extensions/v1beta1","kind":"Ingress","metadata":{"annotations":{"nginx.ingress.kubernetes.io/rewrite-target":"/"},"name":"Tomcat-ingress","namespace":"kube-system"},"spec":{"rules":[{"http":{"paths":[{"backend":{"serviceName":"Tomcat-deployment-service","servicePort":8080},"path":"/"},{"backend":{"serviceName":"nginx-dep-ser","servicePort":80},"path":"/nginx"}]}}]}}
nginx.ingress.kubernetes.io/rewrite-target: /
ingress.kubernetes.io/backends: {"k8s-be-30985--b0fc8aa23db1001d":"HEALTHY","k8s-be-31229--b0fc8aa23db1001d":"HEALTHY","k8s-be-32736--b0fc8aa23db1001d":"HEALTHY"}
ingress.kubernetes.io/forwarding-rule: k8s-fw-kube-system-Tomcat-ingress--b0fc8aa23db1001d
ingress.kubernetes.io/target-proxy: k8s-tp-kube-system-Tomcat-ingress--b0fc8aa23db1001d
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal CREATE 33m nginx-ingress-controller Ingress kube-system/Tomcat-ingress
Normal ADD 33m loadbalancer-controller kube-system/Tomcat-ingress
Normal UPDATE 3m (x65 over 33m) nginx-ingress-controller Ingress kube-system/Tomcat-ingress
Normal CREATE 3m (x31 over 33m) loadbalancer-controller ip: REDACTED_SERVER_IP
Je suppose que vous avez une version assez récente du contrôleur d'entrée, et selon la Documentation :
Démarrer la version 0.22.0, Définitions d'entrée utilisant l'annotation
nginx.ingress.kubernetes.io/rewrite-target
ne sont pas compatibles avec les versions précédentes. Dans la version 0.22.0 et au-delà, toutes les sous-chaînes de l'URI de la demande devant être transmises au chemin de réécriture doivent être définies explicitement dans un groupe de capture .
Par exemple:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1
name: Tomcat-ingress
namespace: default
spec:
rules:
- Host: rewrite.bar.com
http:
paths:
- backend:
serviceName: Tomcat-deployment-service
servicePort: 8080
path: /Tomcat/?(.*)
- backend:
serviceName: nginx-deployment-service
servicePort: 80
path: /nginx/?(.*)
Votre configuration actuelle fonctionne bien pour /
et /nginx
Destinations uniquement avec la version récente du contrôleur d'entrée.
Une autre chose importante, l'objet d'entrée doit être créé dans le même espace de noms avec le (s) service (s) qu'il fait référence. Sinon ingressant-nginx retourne généralement 503 Service Temporarily Unavailable
Erreur.
Et il n'est pas autorisé à se référer à un service dans l'espace de noms différent du serviceName
:
une étiquette DNS-1035 doit être constituée de caractères alphanumériques minuscules ou de '-', commencez par un caractère alphabétique et se terminer par un caractère alphanumérique (par exemple, "nom mon-nom" ou "ABC-123", le regex utilisé pour la validation est ' az? ')