我目前正在探索使用EKS在AWS上运行Istio / Kubernetes集群。我希望能够为群集中运行的每个服务分配不同的IAM角色,以限制每个服务的AWS权限。
在非Istio Kubernetes集群中,此功能由kube2iam等项目提供,但在Istio世界中,这似乎并不理想,因为kube2iam依赖iptables规则,并且Istio已经使用iptables规则将所有出站流量转移到特使侧车。
Istio security documentation表示,身份模型迎合了不同的底层实现,而在亚马逊网络服务上,该实现是IAM:
在Istio标识模型中,Istio使用一级服务标识来确定服务的标识。这为表示人类用户、单个服务或一组服务提供了极大的灵活性和粒度。在没有此类标识的平台上,Istio可以使用可以对服务实例进行分组的其他标识,例如服务名称。
不同平台上的Istio服务标识:
Kubernetes: Kubernetes服务帐号
GKE/GCE:可以使用GCP服务帐户
GCP: GCP服务帐户
AWS: AWS IAM用户/角色帐户
但我还没有看到任何关于如何将IAM角色分配给Istio ServiceRoles的额外文档。
有人找到解决这个问题的办法了吗?
更新:请参阅IRSA
发布于 2018-12-19 08:26:00
我也在为此而苦苦挣扎,但几乎没有找到什么帮助。我确实成功地使用了这个人的建议https://groups.google.com/forum/m/#!topic/istio-users/3-fp2JPb2dQ
在我添加该服务入口之前,我一直没有让kube2iam正常工作(见下文或点击链接)。
基本上你可以添加这个
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: apipa
spec:
hosts:
- 169.254.169.254
ports:
- number: 80
name: http
protocol: HTTP
resolution: DNS
location: MESH_EXTERNAL从应用serviceentry之前查看istio-proxy侧边车可以看出,日志中有许多404错误,路径看起来都像aws api调用。在服务进入后,这些都变成了200。
更新....后来我发现,当使用istio进行任何外部网格通信时,这是预期的要求。请参阅https://istio.io/docs/concepts/traffic-management/#service-entries
发布于 2019-10-08 23:14:21
Istio配置允许从代理https://istio.io/docs/tasks/traffic-management/egress/egress-control/#direct-access-to-external-services中排除某些IP范围
因此,如果您将global.proxy.excludeIPRanges: "169.254.169.254/32"添加到istio配置,则所有对AWS元数据IP的请求将不会由istio处理,而是直接发送到此IP。
它将允许应用kube2iam iptables规则。
请参阅https://github.com/istio/istio/issues/9297#issuecomment-516353921
https://stackoverflow.com/questions/52732417
复制相似问题