Я запускаю Ingress
для некоторых служб в Kubernets, и хотя службы перенаправляют на эти IP-адреса кластера (несколько корректно), я не уверен, как правильно разрешать пути после этих базовых путей, например, еслиУ меня есть Tomcat на пути /
и Nginx на пути /nginx
, любой путь Tomcat после /
не разрешается, и ни один путь Nginx не разрешается даже для /
.У меня уже установлено nginx.ingress.kubernetes.io/rewrite-target: /
в моем 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
Если Tomcat требует, например, файл /main.css
, браузер попытается получить /main.css
, но это вернет default-backend
.
Кроме того, если я пытаюсь посетить /nginx
(пытаясь нажать /
) на сервере Nginx, Nginx сообщает, что /nginx
не найден (очевидно).
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"
Как я могу сделать пути после указанного path
в ingress.yaml
разрешить с учетом начальной части пути, как видно из службы?
т.е.
- Если Tomcat был подключен к
/tomcat
, как я могу сделать так, чтобы /tomcat/main.css
отображался как /main.css
на сервере Tomcat (а не преобразовывался в резервную копию по умолчанию)? - Если Nginx был подключен к
/nginx
, как я могу заставить /nginx
отображаться как /
на сервере Nginx (а не как /nginx
)?
Я думал, что именно это /rewrite-target
предполагалосьделать.
Нужно ли использовать групповые символы или что-то еще?
Мой вход следующий:
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