Denials 和黑白名单
此任务说明了如何使用简单的 denials、基于属性的黑白名单、基于 IP 的黑白名单来控制对服务的访问。
开始之前
请按照此安装指南中的说明,在 Kubernetes 上安装 Istio。
部署 Bookinfo 样例应用。
初始化直接访问
reviews
服务的应用程序的版本路由请求,对于测试用户 “jason” 的请求直接指定到 v2 版本,其他用户的请求指定到 v3 版本。$ kubectl apply -f @samples/bookinfo/networking/virtual-service-all-v1.yaml@
然后执行以下命令:
$ kubectl apply -f @samples/bookinfo/networking/virtual-service-reviews-jason-v2-v3.yaml@
简单的 denials
通过 Istio 您可以根据 Mixer 中可用的任意属性来控制对服务的访问。 这种简单形式的访问控制是基于 Mixer 选择器的条件拒绝请求功能实现的。
考虑 Bookinfo 示例应用,其中 ratings
服务可通过 reviews
服务的多个版本进行访问。
我们想切断对 reviews
服务 v3
版本的访问。
将浏览器定位到 Bookinfo
productpage
(http://$GATEWAY_URL/productpage
)。如果您以 “jason” 用户身份登录,则每个评论都应看到黑色的星标, 它表示
ratings
服务是通过 “v2” 版本reviews
服务访问到的。如果您以其他任何用户身份登录(或登出),则每个评论都应看到红色的星标, 它表示
ratings
服务是通过 “v3” 版本reviews
服务访问到的。要想明确地拒绝对
v3
版本reviews
服务的访问。连同处理程序和实例,执行以下命令来配置拒绝规则。
$ kubectl apply -f @samples/bookinfo/policy/mixer-rule-deny-label.yaml@
注意
denyreviewsv3
规则的以下部分:match: destination.labels["app"] == "ratings" && source.labels["app"]=="reviews" && source.labels["version"] == "v3"
它将带有
v3
标签的reviews
工作负载请求与ratings
工作负载进行匹配。该规则通过使用
denier
适配器来拒绝v3
版本 reviews 服务的请求。 适配器始终拒绝带有预配置状态码和消息的请求。 状态码和消息在 denier 适配器配置中指定。在浏览器里刷新
productpage
。如果您已登出或以非 “json” 用户登录,因为
v3 reviews
服务已经被拒绝访问ratings
服务,所以您不会再看到红色星标。 相反,如果您以 “json” 用户(v2 reviews 服务
用户)登录,可以一直看到黑色星标。
基于属性的 白名单 或 黑名单
Istio 支持基于属性的白名单和黑名单。
以下白名单配置等同于上一节的 denier
配置。
此规则能有效地拒绝 v3
版本 reviews
服务的请求。
移除上一节 denier 配置。
$ kubectl delete -f @samples/bookinfo/policy/mixer-rule-deny-label.yaml@
如果您正在使用 Istio 1.1.2 或更早版本:
$ kubectl delete -f @samples/bookinfo/policy/mixer-rule-deny-label-crd.yaml@
当您不登录去访问 Bookinfo
productpage
(http://$GATEWAY_URL/productpage
) 时进行验证,会看到红星。 再执行以下步骤之后,除非您以 “json” 用户登录,否则不会看到星标。将配置应用于
list
适配器以让v1,v2
版本位于白名单中;$ kubectl apply -f @samples/bookinfo/policy/mixer-rule-deny-whitelist.yaml@
当您不登录去访问 Bookinfo
productpage
(http://$GATEWAY_URL/productpage
) 时进行验证,不会看到星标。 以 “jason” 用户登录后验证,您会看到黑色星标。
基于 IP 的 白名单 或 黑名单
Istio 支持基于 IP 地址的 白名单 和 黑名单 。 您可以配置 Istio 接受或拒绝从一个 IP 地址或一个子网发出的请求。
您可以访问位于
http://$GATEWAY_URL/productpage
的 Bookinfoproductpage
来进行验证。 一旦应用以下规则,您将无法访问它。将配置应用于
list
适配器以添加 ingress 网关中的子网"10.57.0.0\16"
到白名单中:$ kubectl apply -f @samples/bookinfo/policy/mixer-rule-deny-ip.yaml@
尝试访问位于
http://$GATEWAY_URL/productpage
的 Bookinfoproductpage
进行验证, 您会获得一个类似的错误:PERMISSION_DENIED:staticversion.istio-system:<your mesh source ip> is not whitelisted
清除
对于简单的 denials,移除 Mixer 配置:
$ kubectl delete -f @samples/bookinfo/policy/mixer-rule-deny-label.yaml@
对于基于属性的黑白名单,移除 Mixer 配置:
$ kubectl delete -f @samples/bookinfo/policy/mixer-rule-deny-whitelist.yaml@
如果您使用 Istio 1.1.2 或更早版本:
$ kubectl delete -f @samples/bookinfo/policy/mixer-rule-deny-whitelist-crd.yaml@
对于基于 IP 的白黑名单,移除 Mixer 配置:
$ kubectl delete -f @samples/bookinfo/policy/mixer-rule-deny-ip.yaml@
如果您使用 Istio 1.1.2 或更早版本:
$ kubectl delete -f @samples/bookinfo/policy/mixer-rule-deny-ip-crd.yaml@
移除应用程序路由规则:
$ kubectl delete -f @samples/bookinfo/networking/virtual-service-all-v1.yaml@ $ kubectl delete -f @samples/bookinfo/networking/virtual-service-reviews-jason-v2-v3.yaml@
如果您不打算探索任何后续任务,请参考清除 Bookinfo 指南来关闭应用程序。