允许从带有Istio CNI插件的init容器向Kubernetes API发出请求



我配置了istio,但没有启用CNI插件。

当时,我有一个带有服务帐户的init容器,它将调用Kubernetes API来验证一些事情(通过kubectl(。

由于我启用了CNI插件,这个init容器失败,并显示以下消息:

与服务器10.23.64.1:443的连接被拒绝-您指定了正确的主机或端口吗?

我尝试删除所有的网络策略,看看这是否是问题所在,但结果相同。我还告诉服务帐户,这个pod使用集群管理员角色,但它没有起到作用。

我测试了Istio的1.6和1.7分支。

这里的问题是什么?没有这个init容器的其他pod也可以正常工作。

为了在启用istio-cni的情况下实现init容器网络连接,请遵循istio文档中的解决方法指南:

与应用程序初始化容器的兼容性

Istio CNI插件可能会导致任何应用程序initContainers的网络连接问题。使用Istio CNI时,kubelet通过以下步骤启动注入的pod:

  1. Istio CNI插件在pod中设置到Istio sidecar代理的流量重定向
  2. 所有init容器都成功执行并完成
  3. Istio sidecar代理与pod的其他容器一起在pod中启动

Init容器在sidecar代理启动之前执行,这可能会导致执行过程中的流量损失。通过以下一种或两种设置避免这种流量损失:

  • 设置traffic.sidecar.istio.io/excludeOutboundIPRanges注释以禁用将流量重定向到init容器通信的任何CIDR
  • 设置traffic.sidecar.istio.io/excludeOutboundPorts注释以禁用将流量重定向到init容器使用的特定出站端口

最新更新