Can';t防止Kubernetes入侵,将路径发送到目标吊舱

Can';t防止Kubernetes入侵,将路径发送到目标吊舱,kubernetes,url-rewriting,kubernetes-ingress,nginx-ingress,Kubernetes,Url Rewriting,Kubernetes Ingress,Nginx Ingress,这可能看起来像一个问题,但它不是因为链接线程中的解决方案不适合我 我将入口配置为根据路径向不同的POD发送请求 期望的行为: 公共ip/app1->pod1\U ip:container1\u端口/ 公共ip/app2->pod2\U ip:container2\u端口/ 公共ip/app3->pod3\U ip:集装箱3\U端口/ 实际行为: 公共ip/app1->pod1\U ip:container1\u端口/app1 公共ip/app2->pod2 ip:container2\u端口/a

这可能看起来像一个问题,但它不是因为链接线程中的解决方案不适合我

我将入口配置为根据路径向不同的POD发送请求

期望的行为:

公共ip/app1->pod1\U ip:container1\u端口/
公共ip/app2->pod2\U ip:container2\u端口/
公共ip/app3->pod3\U ip:集装箱3\U端口/

实际行为:

公共ip/app1->pod1\U ip:container1\u端口/app1
公共ip/app2->pod2 ip:container2\u端口/app2
公共ip/app3->pod3\U ip:集装箱3\U端口/app3

我们在app1,app2,app3上得到了404

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: some_name
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt-prod
    acme.cert-manager.io/http01-edit-in-place: "true"
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    nginx.ingress.kubernetes.io/use-regex: "true"
spec:
  ingressClassName: "nginx"
  tls:
  - hosts:
    - some.host
    secretName: tls-cafe-ingress
  rules:
  - host: some.host
    http:
      paths:
      - path: /app1(/|$)(.*)
        backend:
          serviceName: app1
          servicePort: 1234
      - path: /app2(/|$)(.*)
        backend:
          serviceName: app2
          servicePort: 2345
      - path: /app3(/|$)(.*)
        backend:
          serviceName: app3
          servicePort: 3456
问题是,一旦路径规范中有正则表达式,入口就会删除路径规范。通过检查入口日志可以看出这一点:

k logs -n nginx-ingress ingress-pod-name
在这里,我们可以看到nginx在日志中有对/appX的请求,并试图从本地html文件夹中为它们提供服务,换句话说,yaml中定义的路径被忽略


如果将正则表达式从其工作的路径中删除,但随后将该路径发送到下游的目标pod,从而中断应用程序

有两种常用的K8s入口控制器使用Nginx:

  • 一个是由开源社区维护的 () 我们通常称之为社区入口控制器
  • 第二个由NGINX维护,其名称为
在本例中应用的关键区别是注释的使用。对于您使用的社区入口控制器:


nginx.ingres.kubernetes.io/document.

你能详细说明一下“应用程序中断”吗?我想你的应用程序中有完整的活性探针,以保证应用程序的健康。你能提供一些详细信息吗:你的k8s版本、ingress类型和版本?在复制之前,我需要知道具体的配置吗?您还可以删除“
”…use regex:“true”
注释并检查它是否有效吗?删除“…use regex:“true”没有任何不同。Kube是v1.18.12+IKS(运行在IBM Kubernetes免费层中。Nginx是1.19.3,取自-我们有一个猜测:也许我们必须将Ingress作为唯一的“官方”关于支持这些注释…不确定,但我们会尝试一下…非常感谢。现在它可以工作了。请随时添加答案,以便我可以接受和upvote@thomas也为迟来的回复道歉,现在已经被接受了,再次感谢
nginx.org/<annoation_type>