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
。我们还可以使用以下任何一个字段来指定请求的来源,如表中所示 。来源示例释义
principals
principals: ["my-service-account"]
任何是有 my-service-account
的工作负载notPrincipals
notPrincipals: ["my-service-account"]
除了 my-service-account
的任何工作负载requestPrincipals
requestPrincipals: ["my-issuer/hello"]
任何具有有效 JWT 和请求主体 my-issuer/hello
的工作负载notRequestPrincipals
notRequestPrincipals: ["*"]
任何没有请求主体的工作负载(只有有效的 JWT 令牌) 。namespaces
namespaces: ["default"]
任何来自 default
命名空间的工作负载notNamespaces
notNamespaces: ["prod"]
任何不在 prod
命名空间的工作负载ipBlocks
ipBlocks: ["1.2.3.4","9.8.7.6/15"]
任何具有 1.2.3.4
的 IP 地址或来自 CIDR 块的 IP 地址的工作负载notIpBlock
notIpBlocks: ["1.2.3.4/24"]
Any IP address that's outside of the CIDR block3.3 操作操作被定义在 to
字段下 , 如果多于一个,则使用 AND
语义 。就像来源一样,操作是成对的,有正反两面的匹配 。设置在操作字段的值是字符串:hosts
和notHosts
ports
和notPorts
methods
和notMethods
paths
和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宫格万能口诀)
- 中国钱币网|中国钱币收藏网