4.11. 添加授权策略


使用第 7 层(L7)授权策略明确允许 curl 服务在阻止所有其他操作时,将 GET 请求发送到 productpage 服务。

流程

  1. 创建类似以下示例的授权策略:

    配置示例

    apiVersion: security.istio.io/v1
    kind: AuthorizationPolicy
    metadata:
      name: productpage-waypoint
      namespace: info
    spec:
      targetRefs:
      - kind: Service
        group: ""
        name: productpage
      action: ALLOW
      rules:
      - from:
        - source:
            principals:
            - cluster.local/ns/curl/sa/curl
        to:
        - operation:
            methods: ["GET"]
    Copy to Clipboard Toggle word wrap

  2. 运行以下命令来应用授权策略:

    $ oc apply -f authorization-policy.yaml
    Copy to Clipboard Toggle word wrap
注意

targetRefs 字段指定通过 waypoint 代理的授权策略为目标的服务。

验证

  1. 运行以下命令,为 curl 客户端创建命名空间:

    $ oc create namespace curl
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令来部署 curl 客户端:

    $ oc apply -n curl -f https://raw.githubusercontent.com/openshift-service-mesh/istio/refs/heads/master/samples/curl/curl.yaml
    Copy to Clipboard Toggle word wrap
  3. 运行以下命令,将 ambient 模式的标签应用到 curl 命名空间:

    $ oc label namespace curl istio.io/dataplane-mode=ambient
    Copy to Clipboard Toggle word wrap
  4. 运行以下命令,验证从 default/curl pod 发出时,验证对 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'
    Copy to Clipboard Toggle word wrap
  5. 运行以下命令,验证到同一服务的 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'
    Copy to Clipboard Toggle word wrap
  6. 运行以下命令,验证来自其他服务的 GET 请求(如 info 命名空间中的 ratings pod)是否也 会被拒绝

    $ 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
    Copy to Clipboard Toggle word wrap
  7. 运行以下命令来清理资源:

    1. 运行以下命令来删除 curl 应用程序:

      $ oc delete -n curl -f https://raw.githubusercontent.com/openshift-service-mesh/istio/refs/heads/master/samples/curl/curl.yaml
      Copy to Clipboard Toggle word wrap
    2. 运行以下命令来删除 curl 命名空间:

      $ oc delete namespace curl
      Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat