跳转至

使用网格完成定向服务访问限制

在业务场景中,我们需要限制只允许服务来访问某些特定的服务,这里可以组合 Istio 能力来进行统一的管理。

在 Istio 中,我们可以使用 Egress 来控制服务对外访问的流量,同时也可以使用 Service Entry 来控制网格外服务,结合授权策略 (Authorized Policy) 来控制服务对外访问的权限。本文将介绍如何使用 Egress 和授权策略来控制服务对外访问的流量和权限。

准备工作

首先,您需要确保你的网格属于正常的状态,如果您还没有安装 Istio,请参考 创建网格

网格启用仅出口流量

配置网格启用仅出口流量,请修改网格的治理信息,查看下方的截图介绍,注意修改了之后,我们的服务对集群外的访问需要配合 Service Entry 来使用。

image

image

创建一个 Egress 网关

image

image

准备测试应用

可以使用任意应用进行测试,在后续步骤中,我们会通过 kubectl exec pod 进入 pod 内进行网络访问测试,建议至少保证应用内有 curl 命令即可。

这里是用了一个简单的 bookinfo 来做示例,您也可以使用其他应用。

另外,需要保证应用的 Pod 被成功注入了 sidecar ,这个可以在网格的界面中查看对应服务的状态。

image

规则配置

下方规则均给出示例展示,您可以在服务网格的界面中进行创建,用 YAML 的方式展示,方便于理解资源的定义。

创建 Service Entry

这里我们首先创建一个允许的出口访问地址,这里我们使用了 baidu 的地址,可以安装如图进行操作

image

image

创建 Virtual Service

image

创建 网关规则

注意使用 ISTIO_MUTAL ,这样才可以用授权策略

image

创建网关规则的 DR

image

创建 baidu 的 DR

让所有流量走 HTTPS

image

启用授权策略

image

功能测试

从示例应用的 Pod 中访问 baidu

可以成功看到访问的结果是正常的,这是因为我们在网格中启用了出口流量,并且限制了来源使用的服务。

image

从其他应用的 Pod 中访问 baidu

此时因为有限定来源服务,所以对于从其他服务发起的咨询,会被拒绝。

image

评论