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.