Настройте контроллер Ingress для пересылки пользовательских заголовков http
Мы настраиваем кластер AKS в Azure, следуя этому руководству: https://docs.microsoft.com/en-us/azure/aks/ingress-own-tls
Мы работаем с 5 .Net Core API за входным контроллером, все работает нормально, запросы перенаправляются хорошо. Однако в нашем интерфейсе SPA мы отправляем настраиваемый заголовок http в наши API, и этот заголовок, кажется, никогда не попадает в API, когда мы проверяем вход в AKS и видим, что нужный заголовок http пуст. В разработке все работает нормально, мы также видим, что заголовок http заполнен в нашей тестовой среде в AKS, поэтому я предполагаю, что вход блокирует эти пользовательские заголовки.
Есть ли какая-либо конфигурация, необходимая для прохождения входа через пользовательские заголовки 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": [
{}
]
}
}
}
3 ответа
В итоге я использовал следующий фрагмент конфигурации:
nginx.ingress.kubernetes.io/configuration-snippet: |
proxy_set_header My-Custom-Header $http_my_custom_header;
nginx делает все пользовательские заголовки http доступными как встроенную переменную через $http_
префикс см. http://nginx.org/en/docs/http/ngx_http_core_module.html
Если я хочу, чтобы мой входной контроллер передавал пользовательский заголовок в бэкэнд-сервис, я могу использовать эту аннотацию в своем входном правиле
nginx.ingress.kubernetes.io/configuration-snippet: |
more_set_headers "Request-Id: $req_id";
По умолчанию входящий трафик не проходит через заголовки с подчеркиванием . Вы могли бы установить
enable-underscores-in-headers: true