Istio Proxy не может подключиться к Istio Pilot

Я установил bookinfo на EKS в соответствии с инструкциями здесь и здесь.

Проверяя, что приложение было установлено правильно, я получил 000 при попытке открыть страницу продукта. После проверки моих сетевых подключений VPC/Subnets/Routing/SecurityGroups я решил проблему как сетевую проблему istio.

После дальнейшего изучения я вошел в контейнер istio-sidecar для страницы продукта и заметил следующую ошибку.

[2019-01-21 09:06:01.039][10][warning][upstream] external/envoy/source/common/config/grpc_mux_impl.cc:41] Unable to establish new stream
[2019-01-21 09:06:28.150][10][warning][upstream] external/envoy/source/common/config/grpc_mux_impl.cc:240] gRPC config stream closed: 14, no healthy upstream

Это заставило меня заметить, что istio-proxy указывает на istio-pilot.istio-system:15007 адрес для открытия. Только странная вещь была, kubernetes istio-pilot.istio-system сервис, похоже, не выставляет порт 15007 как показано ниже.

[procyclinsur@localhost Downloads]$ kubectl get svc istio-pilot --namespace=istio-system
NAME          TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                                 AGE
istio-pilot   ClusterIP   172.20.185.72   <none>        15010/TCP,15011/TCP,8080/TCP,9093/TCP   1d

Infact ни одна из услуг от istio-system пространство имен, кажется, выставляет этот порт. Я предполагаю, что это istio-pilot.istio-system адрес - это адрес, используемый для gRPC, и он хотел бы знать, как это исправить, так как он указывает на неправильный адрес; Пожалуйста, поправьте меня, если я ошибаюсь.

Соответствующие журналы

istio-прокси

2019-01-21T09:04:58.949152Z info    Version root@6f6ea1061f2b-docker.io/istio-1.0.5-c1707e45e71c75d74bf3a5dec8c7086f32f32fad-Clean
2019-01-21T09:04:58.949283Z info    Proxy role: model.Proxy{ClusterID:"", Type:"sidecar", IPAddress:"10.20.228.89", ID:"productpage-v1-54b8b9f55-jpz8g.default", Domain:"default.svc.cluster.local", Metadata:map[string]string(nil)}
2019-01-21T09:04:58.949971Z info    Effective config: binaryPath: /usr/local/bin/envoy
configPath: /etc/istio/proxy
connectTimeout: 10s
discoveryAddress: istio-pilot.istio-system:15007
discoveryRefreshDelay: 1s
drainDuration: 45s
parentShutdownDuration: 60s
proxyAdminPort: 15000
serviceCluster: productpage
zipkinAddress: zipkin.istio-system:9411

4 ответа

Решение

Я хотел опубликовать решение моей проблемы.

Проблема:

EKS DNS не работал должным образом, поэтому ни одно из других решений (хотя и очень хорошее!) Не сработало для меня.

Причина:

Когда AWS VPC создается впервые, настройки DNS VPC неправильно настроены для EKS. Следующие настройки VPC должны быть включены EKS.

  • Разрешение DNS: включено
  • DNS-имена хостов: отключено <-- Default VPC Settings

Решение:

Задавать DNS hostnames в Enabled и DNS начинает работать как положено.

Игнорируйте предупреждения gRPC, они не имеют смысла. Убедитесь, что вы сделали kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml

Если вы делаете kubectl exec $(kubectl get pod --selector app=ratings --output jsonpath='{.items[0].metadata.name}') -c istio-proxy -- ps -ef вы увидите запись, как--discoveryAddress istio-pilot.istio-system:15011, Это адрес, по которому коляска связывается с пилотом и ДОЛЖНА соответствовать записи, которую вы видите, используя kubectl -n istio-system get service istio-pilot,

Если discoveryAddress соответствует порту Pilot, вы можете проверить работу сети. Вы не можете легко свернуться на адрес обнаружения, но если вы делаете kubectl exec $(kubectl get pod --selector app=ratings --output jsonpath='{.items[0].metadata.name}') -c istio-proxy -- curl https://istio-pilot.istio-system:15011 и вы получаете тайм-аут, то есть проблема со связью.

Адрес обнаружения поступает из конфигурации Istio. Если вы делаете kubectl -n istio-system get cm istio-sidecar-injector возраст старше установленного Istio. Возможно, возникла проблема с обновлением более старой версии Istio.

Чтобы убедиться, что Istio работает правильно, отправьте запрос на productpage из другой капсулы, например, из ratings:

kubectl exec -it $(kubectl get pod -l app=ratings -o jsonpath='{.items[0].metadata.name}') -c ratings -- curl productpage:9080/productpage | grep -o "<title>.*</title>"

Выход должен быть: <title>Simple Bookstore App</title>

Если вы получите правильный вывод, возможно, проблема в ваших определениях Ingress.

Тщательно проверьте, что вы выполнили шаги, указанные здесь и здесь.

Отправляю вам ссылку на документы Istio, которые могут быть очень полезны при отладке Istio.

Другие вопросы по тегам