version: v2 标签的工作负载 。action 字段被设置为 DENY 。
最后,我们在 rules 字段中定义所有规则 。我们例子中的规则是说 , 当请求来自 default 命名空间之外时 , 拒绝对 customers v2 工作负载的请求(action) 。
除了规则中的 from 字段外,我们还可以使用 to 和 when 字段进一步定制规则 。让我们看一个使用这些字段的例子 。
apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata:name: customers-denynamespace: default spec:selector:matchLabels:app: customersversion: v2action: DENYrules:- from:- source:notNamespaces: ["default"]- to:- operation:methods: ["GET"]- when:- key: request.headers [User-Agent]values: ["Mozilla/*"]我们在规则部分添加了 to 和 when 字段 。如果我们翻译一下上面的规则,我们可以说,当客户的 GET 请求来自 default 命名空间之外,并且 User Agent 头的值与正则表达式 Mozilla/* 相匹配时,我们会拒绝 customers v2 的工作负载 。
总的来说,to 定义了策略所允许的行动,from 定义了谁可以采取这些行动,when 定义了每个请求必须具备的属性,以便被策略所允许,selector 定义了哪些工作负载将执行该策略 。
如果一个工作负载有多个策略,则首先评估拒绝的策略 。评估遵循这些规则:
- 如果有与请求相匹配的 DENY 策略,则拒绝该请求
- 如果没有适合该工作负载的 ALLOW 策略,则允许该请求 。
- 如果有任何 ALLOW 策略与该请求相匹配,则允许该请求 。
- 拒绝该请求
notNamespaces 。我们还可以使用以下任何一个字段来指定请求的来源,如表中所示 。来源示例释义
principalsprincipals: ["my-service-account"]任何是有 my-service-account 的工作负载notPrincipalsnotPrincipals: ["my-service-account"]除了 my-service-account 的任何工作负载requestPrincipalsrequestPrincipals: ["my-issuer/hello"]任何具有有效 JWT 和请求主体 my-issuer/hello 的工作负载notRequestPrincipalsnotRequestPrincipals: ["*"]任何没有请求主体的工作负载(只有有效的 JWT 令牌) 。namespacesnamespaces: ["default"]任何来自 default 命名空间的工作负载notNamespacesnotNamespaces: ["prod"]任何不在 prod 命名空间的工作负载ipBlocksipBlocks: ["1.2.3.4","9.8.7.6/15"]任何具有 1.2.3.4 的 IP 地址或来自 CIDR 块的 IP 地址的工作负载notIpBlocknotIpBlocks: ["1.2.3.4/24"]Any IP address that's outside of the CIDR block3.3 操作操作被定义在 to 字段下 , 如果多于一个,则使用 AND 语义 。就像来源一样,操作是成对的,有正反两面的匹配 。设置在操作字段的值是字符串:hosts和notHostsports和notPortsmethods和notMethodspaths和notPath
paths:["/api/*","/admin"] 或特定的端口 ports: ["8080"],以此类推 。3.4 条件为了指定条件,我们必须提供一个
key 字段 。key 字段是一个 Istio 属性的名称 。例如,request.headers、source.ip、destination.port 等等 。关于支持的属性的完整列表 , 请参考 授权政策条件 。条件的第二部分是
values 或 notValues 的字符串列表 。下面是一个 when 条件的片段: ...- when:- key: source.ipnotValues: ["10.0.1.1"]四.实战:授权(访问控制)4.1 访问控制在这个实验中 , 我们将学习如何使用授权策略来控制工作负载之间的访问 。首先部署 Gateway:
apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata:name: gateway spec:selector:istio: ingressgatewayservers:- port:number: 80name: httpprotocol: HTTPhosts:- '*'将上述 YAML 保存为 gateway.yaml,并使用 kubectl apply -f gateway.yaml 部署网关 。接下来,我们将创建 Web 前端部署、服务账户、服务 和 VirtualService 。
推荐阅读
- 五 Istio:使用服务网格Istio进行流量路由
- 二 Istio:在Kubernetes(k8s)集群上安装部署istio1.14
- 魅族18和一加9对比_魅族18和一加9参数对比
- ipad分屏怎么打开(ipad第九代可以分屏吗)
- 九都金柜保险柜怎么开(全能保险柜怎么开)
- 少女前线纵向应变第九交响曲怎么通关
- 九重试炼免广告卷怎么获取
- 九重试炼免广告卷获取方式是什么
- 九宫格数独怎么玩(9宫格万能口诀)
- 中国钱币网|中国钱币收藏网
