Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json 针对Ingress Nginx外部身份验证的自定义响应_Json_Kubernetes_Nginx Ingress_Fastapi - Fatal编程技术网

Json 针对Ingress Nginx外部身份验证的自定义响应

Json 针对Ingress Nginx外部身份验证的自定义响应,json,kubernetes,nginx-ingress,fastapi,Json,Kubernetes,Nginx Ingress,Fastapi,我已经在EKS上部署了Kubernetes群集。我有一个入口nginx,它通过负载均衡器将流量路由到不同的服务。在ingress nginx中,第一个请求转到auth服务进行身份验证,如果它是一个有效的请求,那么我允许它向前移动。这是通过使用ingress nginx注释nginx.ingress.kubernetes.io/auth url来完成的。 Auth服务是使用FastAPI开发的。对于来自fastAPI的401响应,如下所示 但是当我使用ingress nginx时,响应如下 有

我已经在EKS上部署了Kubernetes群集。我有一个入口nginx,它通过负载均衡器将流量路由到不同的服务。在ingress nginx中,第一个请求转到auth服务进行身份验证,如果它是一个有效的请求,那么我允许它向前移动。这是通过使用ingress nginx注释nginx.ingress.kubernetes.io/auth url来完成的。 Auth服务是使用FastAPI开发的。对于来自fastAPI的401响应,如下所示

但是当我使用ingress nginx时,响应如下

有没有办法从Ingress nginx获取JSON响应? 入口文件

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress-service
  annotations:
    kubernetes.io/ingress.class: 'nginx'
    nginx.ingress.kubernetes.io/use-regex: 'true'
    nginx.ingress.kubernetes.io/rewrite-target: /$1
    nginx.ingress.kubernetes.io/auth-response-headers: item_id
    nginx.ingress.kubernetes.io/auth-method: POST
    nginx.ingress.kubernetes.io/auth-url: http://pth-auth.default.svc.cluster.local:8000/item/1
    # UPDATE THIS LINE ABOVE
spec:
  rules:
    - http:
        paths:
          - path: /?(.*)
            # UPDATE THIS LINE ABOVE
            backend:
              serviceName: client-cluster-ip-service
              servicePort: 3000
          - path: /api/?(.*)
            # UPDATE THIS LINE ABOVE
            backend:
              serviceName: server-cluster-ip-service
              servicePort: 5000
          - path: /pth-auth/?(.*)
            # UPDATE THIS LINE ABOVE
            backend:
              serviceName: pth-auth
              servicePort: 8000

这对我来说很有用,从这里得到了参考


如果发生错误,您只需告诉nginx将流量路由到此位置,他们的功能将处理特定错误。在我的例子中,函数是error/{error\u code}。

你能提供你的ingress yaml文件吗?添加了ingress文件。请看一下这个,你能不能将tls部分添加到ingress yaml文件并通过https访问url?在注释中更改它。
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress-service
  annotations:
    kubernetes.io/ingress.class: 'nginx'
    nginx.ingress.kubernetes.io/use-regex: 'true'
    nginx.ingress.kubernetes.io/rewrite-target: /$1
    nginx.ingress.kubernetes.io/auth-response-headers: item_id
    nginx.ingress.kubernetes.io/auth-method: POST
    nginx.ingress.kubernetes.io/auth-url: http://pth-auth.default.svc.cluster.local:8000/items/1
    nginx.ingress.kubernetes.io/server-snippet: |
      location = /error/401 {
        proxy_method POST;
        proxy_pass http://pth-auth.default.svc.cluster.local:8000/error/401;
      }
      location = /error/403 {
        proxy_method POST;
        proxy_pass http://pth-auth.default.svc.cluster.local:8000/error/403;
      }
    nginx.ingress.kubernetes.io/configuration-snippet: |
      error_page 401 /error/401;
      error_page 403 /error/403;
    # UPDATE THIS LINE ABOVE
spec:
  rules:
    - http:
        paths:
          - path: /?(.*)
            # UPDATE THIS LINE ABOVE
            backend:
              serviceName: client-cluster-ip-service
              servicePort: 3000
          - path: /api/?(.*)
            # UPDATE THIS LINE ABOVE
            backend:
              serviceName: server-cluster-ip-service
              servicePort: 5000
          - path: /pth-auth/?(.*)
            # UPDATE THIS LINE ABOVE
            backend:
              serviceName: pth-auth
              servicePort: 8000