Kubernetes Nginx 控制器正则表达式规则不起作用

Kubernetes Nginx 控制器正则表达式规则不起作用

我最近正在尝试为我的 Kubernetes 集群构建一个 Nginx Ingress 网络。我通过入口控制器映像 docker.io/nginx/nginx-ingress:alpine 使用 Kubernetes 1.15.0 和 Nginx 1.17.2。

我正在使用一个简单的服务器进行测试,它只告诉客户端请求的路径是什么。这是为了了解 Ingress 资源配置中的重写目标和路径规则。下面是我正在使用的入口配置文件,

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-test
  annotations:
    nginx.ingress.kubernetes.io/use-regex: "true"
    nginx.ingress.kubernetes.io/rewrite-target: "/"
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: kubernetes-brion-us
    http:
      paths:
      - backend:
          serviceName: test
          servicePort: 1000
        path: "/test"
      - backend:
          serviceName: test
          servicePort: 1000
        path: "/abc/(.*)"

以下是尝试访问这些服务的输出,

> curl http://kubernetes-brion-us/test
incoming url /test
> curl http://kubernetes-brion-us/abc/test
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.17.2</center>
</body>
</html>
> curl "http://kubernetes-brion-us/abc/(.*)"
incoming url /abc/(.*)

在控制器 Pod 中,Nginx 配置反映了上述行为,

/ # grep location /etc/nginx/conf.d/default-ingress-test.conf 
    location /test {
    location /abc/(.*) {
/ # grep root /etc/nginx/conf.d/default-ingress-test.conf 
/ # 

根据 Kubernetes 文档,ingress.spec.rules.http.paths.path 资源“是与传入请求的路径匹配的扩展 POSIX 正则表达式”。

除了我怀疑 Nginx 配置文件未使用正则表达式规则的“location ~ /abc/(.*)”语法之外,location 指令没有“root”重写目标。我的简单服务器也表明了这一点。

我用了nginxinc/kubernetes-ingress安装 Nginx 入口控制器。

欢迎回答以下问题

  • 我的 nginx.ingress.kubernetes.io 注释未应用吗?如果是,为什么?
  • 为什么 Nginx 控制器不遵守我提供的正则表达式规则?
  • 我是否下载了错误的 nginx-ingress 镜像?如果是,我应该下载哪个?
  • 这是询问的正确地方吗?还是我应该将其移至 nginx-ingress 项目的 github 问题?

答案1

我使用了错误的 nginxinc/kubernetes-ingress 镜像和安装过程。我需要改用这个https://github.com/kubernetes/ingress-nginx

相关内容