Kubernetes nginx入口控制器丢弃响应头/如何从外部身份验证获取响应头

Kubernetes nginx入口控制器丢弃响应头/如何从外部身份验证获取响应头,kubernetes,kubernetes-ingress,Kubernetes,Kubernetes Ingress,我正在使用nginx入口控制器和外部身份验证通过授权应用程序路由到我的应用程序。下面是我的入口文件: apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: hello-kubernetes-ingress annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/auth-url: http://b

我正在使用nginx入口控制器和外部身份验证通过授权应用程序路由到我的应用程序。下面是我的入口文件:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: hello-kubernetes-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/auth-url: http://b20bdc2b8916.ngrok.io/authorize
    nginx.ingress.kubernetes.io/auth-method: POST
spec:
  rules:
  - host: hw1.yourdomain
    http:
      paths:
      - backend:
          serviceName: hello-kubernetes-first
          servicePort: 80
  - host: hw2.yourdomain
    http:
      paths:
      - backend:
          serviceName: hello-kubernetes-second
          servicePort: 80
~
授权API返回响应头(主体id、应用程序类型),我希望从下面的命令中获取

curl -X GET "http://hw1.yourdomain" -H  "accept: */*" -H  "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ik15dDZzVVd2WWdkS253WHVlVE9XaC0zNVFzdnFRSjk3aDdOTFhVdkt4YUkifQ.eyJpc3MiOiJodHR*****"




  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   668  100   668    0     0     49      0  0:00:13  0:00:13 --:--:--   152HTTP/1.1 200 OK
Date: Tue, 09 Mar 2021 09:35:52 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 668
Connection: keep-alive
X-Powered-By: Express
ETag: W/"29c-/QY+HmD5p/HwK1AOeM+b3H5wbI0"

<!DOCTYPE html>
<html>
<head>
    <title>Hello Kubernetes!</title>
    <link rel="stylesheet" type="text/css" href="/css/main.css">
    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Ubuntu:300" >
</head>
<body>

  <div class="main">
    <img src="/images/kubernetes.png"/>
    <div class="content">
      <div id="message">
  Hello from the first deployment!
</div>
<div id="info">
  <table>
    <tr>
      <th>pod:</th>
      <td>hello-kubernetes-first-8477fc565d-gb22w</td>
    </tr>
    <tr>
      <th>node:</th>
      <td>Linux (4.19.157)</td>
    </tr>
  </table>

</div>
    </div>
  </div>

</body>
</html>
curl-X GET”http://hw1.yourdomain“-H”接受:*/*“-H”授权:持票人EYJ0EXAIIOIJKV1QILCJHBGCIOIJSUZI1NIISIMTPZCI6IK15DDZZVVD2WWDKS253WHVLVE9XAC0ZNFZDRSJK3ADDOTFHVDKT4YUKIFQ.EYJPC3MIOIJ0DHR***”
%总接收百分比%x平均速度时间电流
数据加载上载总左速度
100 668 100 668 0 49 0 0:00:13 0:00:13--::--152HTTP/1.1 200正常
日期:2021年3月9日星期二09:35:52 GMT
内容类型:text/html;字符集=utf-8
内容长度:668
连接:保持活力
X-Powered-By:Express
ETag:W/“29c-/QY+HmD5p/HwK1AOeM+b3H5wbI0”
你好,库伯内特斯!
您好,从第一次部署开始!
豆荚:
你好-库伯内特斯-第一-8477fc565d-gb22w
节点:
Linux(4.19.157)

如何从auth url获取响应头?

如果您使用的是自定义头,如果不遵循HTTP头,Nginx将删除您的deader

当您在标题中使用
\uuu
时,这主要是可能的

在这种情况下,您可以更新Nginx configmap并重新启动Nginx PODs以允许和传递自定义头

您可以打开Nginx的配置映射并更新配置

enable-underscores-in-headers: "true"
Nginx配置映射示例

apiVersion: v1
data:
  enable-underscores-in-headers: "true"
kind: ConfigMap
metadata:
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
  name: nginx-configuration
  namespace: ingress-nginx

您是否使用自定义标题?默认情况下,如果不遵循HTTP标准,Nginx将删除标头。是,这些是自定义标头。什么是http标准nginx检查?您在头文件中使用了吗?不,我没有使用(下划线),但我使用-(Hypen)哦,好的。理想情况下,HTTP标准建议仅使用-(连字符)。如果可以,请尝试更新configmap。我遇到了类似的问题。我从标题中删除了下划线,但仍然无法获取响应标题。我现在没有在响应头中使用任何特殊字符。您是否更新了您的confimap?是的,已更新,但没有luckcustom头对我有效。您从auth url获得的自定义响应头可以作为后端服务的请求头看到?