在 istio-proxy 运行 之后启动 container/pod

Starting a container/pod after running the istio-proxy

我正在尝试使用 Istio 和 Envoy 通过 Kubernetes 为服务实现服务网格。我能够设置服务和 istio-proxy,但我无法控制容器和 istio-proxy 的启动顺序。

我的容器是第一个启动并尝试通过 TCP 访问外部资源,但当时 istio-proxy 尚未完全加载,外部资源的 ServiceEntry 也未完全加载

我尝试在我的服务中添加 panic,还尝试在访问外部资源之前休眠 5 秒。

有什么方法可以控制它们的顺序吗?

我认为除了在 pod 规范中以特定顺序列出容器外,您无法控制顺序。因此,我建议您配置一个 Readiness Probe,以便在您的服务可以向外部发送一些流量之前,您的 pod 还没有准备好。

Github 问题在这里:

Support startup dependencies between containers on the same Pod

We're currently recommending that developers solve this problem themselves by running a startup script on their application container which delays application startup until Envoy has received its initial configuration. However, this is a bit of a hack and requires changes to every one of the developer's containers.

在 istio 版本 1.7.X 及更高版本上,您可以添加配置选项 values.global.proxy.holdApplicationUntilProxyStarts,这会导致 sidecar 注入器在 pod 的容器列表的开头注入 sidecar 并将其配置为阻塞所有其他容器的启动,直到代理准备就绪。默认情况下禁用此选项。

根据https://istio.io/latest/news/releases/1.7.x/announcing-1.7/change-notes/