Я интегрировал свое развертывание k8s с конечными точками Google. У меня 12 сервисов, из которых 11 работают нормально с конечными точками Google, за исключением одного сервиса. Когда он передает запросы к контейнеру приложения, он игнорирует значения заголовка с подчеркиванием.
Реализация Я добавил это в моем развертывании приложения (игнорировать синтаксис, он имеет правильный формат при развертывании)
- args:
- --http_port
- "8081"
- --backend
- 127.0.0.1:8080
- --service
- <MY_ENDPOINT>
- --service_account_key
- /etc/nginx/creds/<MY_CREDS>
- --rollout_strategy=managed
image: gcr.io/endpoints-release/endpoints-runtime:1
imagePullPolicy: Always
name: esp
ports:
- containerPort: 8081
protocol: TCP
resources: {}
volumeMounts:
- mountPath: /etc/nginx/creds
name: service-account-creds
readOnly: true
Здесь, в следующем примере, я отправил два заголовка с TEST-CODE и TEST_CODE. Оба получают в конце приложения, когда я отправляю запрос через порт приложения, но когда я получаю к нему доступ через порт esp, я получаю только заголовок с - (дефис), а не с _ (подчеркивание). TEST-CODE принимается на сервере, но не TEST_CODE, при доступе через esp.
Когда я отправляю запрос в мое приложение, используя curl или postman через 8080, который является портом приложения
curl -XPOST http://localhost:8080/<CONTEXT_PATH> -H "Content-Type: application/json" -H "USER-ID: abc" -H "TEST-CODE: xyz" -H "TEST_CODE: wxyz"
Я получаю ответ, подобный этому
{
"timestamp": "2020-04-05T19:42:44.958564Z",
"principal": null,
"session": null,
"request": {
"method": "POST",
"uri": "http://localhost:8080/<MY_URL>",
"headers": {
"host": [
"localhost:8080"
],
"test-code": [
"xyz"
],
"content-type": [
"application/json"
],
"x-user-id": [
"abc"
],
"test_code": [
"wxyz"
],
"user-agent": [
"curl/7.52.1"
],
"accept": [
"*/*"
]
},
"remoteAddress": null
},
"response": {
"status": 200,
"headers": {
"Content-Length": [
"435"
],
"Date": [
"Sun, 05 Apr 2020 19:42:45 GMT"
],
"Content-Type": [
"application/json;charset=UTF-8"
]
}
},
"timeTaken": 633
}
Когда я отправляю запрос в свое приложение с помощью curl или почтальона через 8081, то есть через esp
curl -XPOST http://localhost:8081/<CONTEXT_PATH>?key=<MY_KEY> -H "Content-Type: application/json" -H "USER-ID: abc" -H "TEST-CODE: xyz" -H "TEST_CODE: wxyz"
Я получаю ответ, подобный этому
{
"timestamp": "2020-04-05T19:42:57.102184Z",
"principal": null,
"session": null,
"request": {
"method": "POST",
"uri": "http://localhost/<MY_URL>?<MY_KEY>",
"headers": {
"x-real-ip": [
"127.0.0.1"
],
"x-google-real-ip": [
"127.0.0.1"
],
"x-cloud-trace-context": [
"<MY_GOOGLE_TRACE_CONTEXT>"
],
"host": [
"localhost"
],
"test-code": [
"xyz"
],
"x-endpoint-api-project-id": [
"<MY_ENDPOINT_PROJECT_ID>"
],
"content-type": [
"application/json"
],
"x-forwarded-for": [
"127.0.0.1"
],
"x-user-id": [
"abc"
],
"user-agent": [
"curl/7.52.1"
],
"accept": [
"*/*"
]
},
"remoteAddress": null
},
"response": {
"status": 400,
"headers": {
"Connection": [
"close"
],
"Content-Length": [
"256"
],
"Date": [
"Sun, 05 Apr 2020 19:42:57 GMT"
],
"Content-Type": [
"application/json"
]
}
},
"timeTaken": 21
}
Опять же,
Обратите внимание на разницу: я отправляю заголовок тестового кода в виде TEST-CODE и TEST_CODE, оба приходят, когда я получаю доступ через порт приложения, но когда я получаю доступ через контейнер esp приложение получает только TEST-CODE, а не TEST_CODE.
Я пробовал некоторые другие заголовки с - (дефис) и некоторые с _ (подчеркивание). Каждый раз, когда заголовки с - (дефис) принимаются через esp к приложению, но не с _ (подчеркивание).
Я принимал вышеупомянутые ответы от конечных точек пружинного привода (актуатор / httptrace)
Может кто-нибудь помочь?