Конечные точки Google игнорируют заголовки с ключом подчеркивания - PullRequest
0 голосов
/ 05 апреля 2020

Я интегрировал свое развертывание 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)

Может кто-нибудь помочь?

...