404 при обращении к `metadata.google.internal` из модуля K8s с помощью Istio

У нас есть приложение, которое мы пытаемся перенести в сетку Istio. Одна из служб отправляет запросы к metadata.google.internal, чтобы завершить настройку среды.

Я создал объект типа ServiceEntry в белый список metadata.google.internal следующим образом (пробовал разные комбинации этого):

apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: google-metadata-server
spec:
  hosts:
  - metadata.google.internal
  location: MESH_EXTERNAL
  ports:
  - number: 80
    name: http
    protocol: HTTP
  resolution: DNS

По какой-то причине я не могу получить правильные ответы, поэтому служба не работает. При проверке журналов в контейнере istio-proxy в службе я получаю следующие ошибки:

[2019-02-07T15:29:22.834Z] "GET /computeMetadata/v1/project/project-idHTTP/1.1" 200 - 0 14 2 1 "-" "Google-HTTP-Java-Client/1.27.0 (gzip)" "513f6e25-57ce-4cf0-a273-d391b3da604b" "metadata.google.internal" "169.254.169.254:80" outbound|80||metadata.google.internal - 169.254.169.254:80 10.16.0.29:58790
[2019-02-07T15:29:22.865Z] "GET /HTTP/1.1" 404 NR 0 0 0 - "-" "Google-HTTP-Java-Client/1.27.0 (gzip)" "490fe0dd-e03a-4460-a63b-7ed84a168d39" "169.254.169.254" "-" - - 169.254.169.254:80 10.16.0.29:58794
[2019-02-07T15:29:22.883Z] "GET /HTTP/1.1" 404 NR 0 0 0 - "-" "Google-HTTP-Java-Client/1.27.0 (gzip)" "dac0e762-d799-4457-ae48-75179e2f0b82" "169.254.169.254" "-" - - 169.254.169.254:80 10.16.0.29:58794
[2019-02-07T15:29:22.886Z] "GET /HTTP/1.1" 404 NR 0 0 0 - "-" "Google-HTTP-Java-Client/1.27.0 (gzip)" "3411a0be-6d29-42f3-b01a-567edf2cc3e2" "169.254.169.254" "-" - - 169.254.169.254:80 10.16.0.29:58794
[2019-02-07T15:29:47.781Z] "GET /computeMetadata/v1/project/project-idHTTP/1.1" 200 - 0 14 4 3 "-" "Google-HTTP-Java-Client/1.27.0 (gzip)" "7115bf46-e7e9-4b2f-ba37-10cd6b8c9dea" "metadata.google.internal" "169.254.169.254:80" outbound|80||metadata.google.internal - 169.254.169.254:80 10.16.0.29:58876

Как видите, я получаю 200 за запросы к /computeMetadata/v1/project/project-id, но это не удается для /. Не знаю почему.

С istio-sidecar-injector pod вроде все нормально. Не на что указывать в журналах.

Я создал простое развертывание с Istio в том же кластере, в том же пространстве имен и вручную telnet-сервером метаданных:

root@demo-675c758c68-vrbcv:/# telnet metadata.google.internal 80
Trying 169.254.169.254...
Connected to metadata.google.internal.
Escape character is '^]'.
GET / HTTP/1.1      
Host: metadata.google.internal

HTTP/1.1 200 OK
metadata-flavor: Google
content-type: application/text
date: Thu, 07 Feb 2019 16:35:52 GMT
server: envoy
content-length: 22
x-xss-protection: 1; mode=block
x-frame-options: SAMEORIGIN
x-envoy-upstream-service-time: 1

0.1/
computeMetadata/

Я не понимаю, почему я получаю эти 404. Есть идеи, что происходит?


person suren    schedule 07.02.2019    source источник
comment
вы можете разместить свой шлюз и виртуальную службу?   -  person Alioua    schedule 12.02.2019
comment
Все разобрались. Если вы проверите журналы, приложение отправляло одни запросы к metadata.google.internal, другие - к 169.254.169.254. Итак, я добавил IP в список хостов.   -  person suren    schedule 12.02.2019
comment
Да, вам нужно добавить - адреса 169.254.169.254 (это адрес метаданных) вы можете пройти мимо своего ответа, чтобы помочь сообществу   -  person Alioua    schedule 13.02.2019
comment
разрешение очень зависит от приложения. Вот почему я этого не сделал. Теперь я не добавил addresses, я добавил адрес как хост. Должен ли я добавить его в addresses?   -  person suren    schedule 13.02.2019
comment
Я прошёл свой ответ, проверяю, как его следует добавить.   -  person Alioua    schedule 13.02.2019


Ответы (1)


Вот как следует добавлять адреса.

apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: google-metadata-server
spec:
  hosts:
  - metadata.google.internal
  addresses:
  - 169.254.169.254
  ports:
  - number: 80
    name: http
    protocol: HTTP
  location: MESH_INTERNAL
  resolution: DNS
person Alioua    schedule 13.02.2019