4.11. 添加授权策略
使用第 7 层(L7)授权策略明确允许 curl 服务在阻止所有其他操作时,将 GET 请求发送到 productpage 服务。
流程
创建类似以下示例的授权策略:
配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来应用授权策略:
oc apply -f authorization-policy.yaml
$ oc apply -f authorization-policy.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
targetRefs 字段指定通过 waypoint 代理的授权策略为目标的服务。
验证
运行以下命令,为
curl客户端创建命名空间:oc create namespace curl
$ oc create namespace curlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来部署
curl客户端:oc apply -n curl -f https://raw.githubusercontent.com/openshift-service-mesh/istio/refs/heads/master/samples/curl/curl.yaml
$ oc apply -n curl -f https://raw.githubusercontent.com/openshift-service-mesh/istio/refs/heads/master/samples/curl/curl.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,将 ambient 模式的标签应用到
curl命名空间:oc label namespace curl istio.io/dataplane-mode=ambient
$ oc label namespace curl istio.io/dataplane-mode=ambientCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证从
default/curlpod 发出时,验证对productpage服务的GET请求是否成功,并带有 HTTP 200 响应:oc -n curl exec deploy/curl -- sh -c \ 'curl -s -o /dev/null -w "HTTP %{http_code}\n" http://productpage.info.svc.cluster.local:9080/productpage'$ oc -n curl exec deploy/curl -- sh -c \ 'curl -s -o /dev/null -w "HTTP %{http_code}\n" http://productpage.info.svc.cluster.local:9080/productpage'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证到同一服务的
POST请求是否因为应用的授权策略而拒绝 HTTP 403 响应:oc -n curl exec deploy/curl -- sh -c \ 'curl -s -o /dev/null -w "HTTP %{http_code}\n" -X POST http://productpage.info.svc.cluster.local:9080/productpage'$ oc -n curl exec deploy/curl -- sh -c \ 'curl -s -o /dev/null -w "HTTP %{http_code}\n" -X POST http://productpage.info.svc.cluster.local:9080/productpage'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证来自其他服务的
GET请求(如info命名空间中的ratingspod)是否也会被拒绝。oc exec "$(oc get pod -l app=ratings -n info \ -o jsonpath='{.items[0].metadata.name}')" \ -c ratings -n info \ -- curl -sS productpage:9080/productpage$ oc exec "$(oc get pod -l app=ratings -n info \ -o jsonpath='{.items[0].metadata.name}')" \ -c ratings -n info \ -- curl -sS productpage:9080/productpageCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来清理资源:
运行以下命令来删除
curl应用程序:oc delete -n curl -f https://raw.githubusercontent.com/openshift-service-mesh/istio/refs/heads/master/samples/curl/curl.yaml
$ oc delete -n curl -f https://raw.githubusercontent.com/openshift-service-mesh/istio/refs/heads/master/samples/curl/curl.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来删除
curl命名空间:oc delete namespace curl
$ oc delete namespace curlCopy to Clipboard Copied! Toggle word wrap Toggle overflow