【问题标题】:Configure Ingress controller to forward custom http headers配置 Ingress 控制器以转发自定义 http 标头
【发布时间】:2019-06-12 02:08:14
【问题描述】:

我们正在 Azure 上设置 AKS 集群,遵循 this guide

我们在入口控制器后面运行 5 个 .Net Core API,一切正常,请求被很好地路由。 但是,在我们的 SPA 前端中,我们向 API 发送了一个自定义的 http 标头,这个标头似乎永远不会到达 API,当我们检查 AKS 中的日志记录时,我们看到所需的 http 标头是空的。 在开发中,一切正常,我们还看到我们在 AKS 的测试环境中填充了 http 标头,所以我猜 ingress 正在阻止这些自定义标头。

是否需要任何配置才能使入口通过自定义 http 标头?

编辑:

{
  "kind": "Ingress",
  "apiVersion": "extensions/v1beta1",
  "metadata": {
    "name": "myappp-ingress",
    "namespace": "myapp",
    "selfLink": "/apis/extensions/v1beta1/namespaces/myapp/ingresses/myapp-ingress",
    "uid": "...",
    "resourceVersion": "6395683",
    "generation": 4,
    "creationTimestamp": "2018-11-23T13:07:47Z",
    "annotations": {
      "kubernetes.io/ingress.class": "nginx",
      "nginx.ingress.kubernetes.io/allow-headers": "My_Custom_Header", //this doesn't work
      "nginx.ingress.kubernetes.io/proxy-body-size": "8m",
      "nginx.ingress.kubernetes.io/rewrite-target": "/"
    }
  },
  "spec": {
    "tls": [
      {
        "hosts": [
          "myapp.com"
        ],
        "secretName": "..."
      }
    ],
    "rules": [
      {
        "host": "myapp.com",
        "http": {
          "paths": [
            {
              "path": "/api/tenantconfig",
              "backend": {
                "serviceName": "tenantconfig-api",
                "servicePort": 80
              }
            },
            {
              "path": "/api/identity",
              "backend": {
                "serviceName": "identity-api",
                "servicePort": 80
              }
            },
            {
              "path": "/api/media",
              "backend": {
                "serviceName": "media-api",
                "servicePort": 80
              }
            },
            {
              "path": "/api/myapp",
              "backend": {
                "serviceName": "myapp-api",
                "servicePort": 80
              }
            },
            {
              "path": "/app",
              "backend": {
                "serviceName": "client",
                "servicePort": 80
              }
            }
          ]
        }
      }
    ]
  },
  "status": {
    "loadBalancer": {
      "ingress": [
        {}
      ]
    }
  }
}

【问题讨论】:

    标签: azure kubernetes .net-core azure-aks nginx-ingress


    【解决方案1】:

    如果我希望我的入口控制器将自定义标头传递给我的后端服务,我可以在我的入口规则中使用此注释

    nginx.ingress.kubernetes.io/configuration-snippet: |
      more_set_headers "Request-Id: $req_id";
    

    【讨论】:

    • 谢谢,你能澄清一下吗?在我的具体情况下,Request-Id 会是 My_Custom_Header 吗? $req_id 变量是什么?我尝试使用 My_Custom_Header 进行设置:测试,不幸的是没有运气
    • 这是一个示例,您需要输入自定义标题 $my_costum_header 的名称和所需的名称。
    • 它让我朝着正确的方向前进,我最终为 proxy_set_header 使用了配置 sn-p
    【解决方案2】:

    我最终使用了以下配置sn-p:

    nginx.ingress.kubernetes.io/configuration-snippet: |
      proxy_set_header My-Custom-Header $http_my_custom_header;
    

    nginx 通过 $http_ 前缀将所有自定义 http 标头作为嵌入变量提供,请参阅 this

    【讨论】:

    • 你能解释一下这个值吗:$http_my_custom_header
    • 我明白了。我不是 nginx 大专家。
    【解决方案3】:
    猜你喜欢
    • 1970-01-01
    • 2018-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-17
    相关资源
    最近更新 更多