gpt4 book ai didi

Kubernetes Ingress 路径重写

转载 作者:行者123 更新时间:2023-12-03 16:32:55 24 4
gpt4 key购买 nike

我在运行 Ingress对于 Kubernetes 上的某些服务,尽管服务正在重定向到这些集群 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从服务的角度考虑路径的开始部分是否解决?
IE。
  • 如果 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

    最佳答案

    我假设您拥有最新版本的入口 Controller ,并且根据 documentation :

    Starting in Version 0.22.0, ingress definitions using the annotation nginx.ingress.kubernetes.io/rewrite-target are not backwards compatible with previous versions. In Version 0.22.0 and beyond, any substrings within the request URI that need to be passed to the rewritten path must explicitly be defined in a capture group.



    例如:
    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/?(.*)

    您当前的配置适用于 //nginx仅使用最新版本的入口 Controller 的目的地。

    另一个重要的事情是,Ingress 对象应该与它所引用的服务在同一个命名空间中创建。否则 ingress-nginx 通常返回 503 Service Temporarily Unavailable错误。

    并且不允许在 serviceName 中引用不同命名空间中的服务。 :

    a DNS-1035 label must consist of lower case alphanumeric characters or '-', start with an alphabetic character, and end with an alphanumeric character (e.g. 'my-name', or 'abc-123', regex used for validation is 'a-z?')

    关于Kubernetes Ingress 路径重写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54956632/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com