Istio 的授权功能为网格中的工作负载提供网格、命名空间和工作负载级别的访问控制。授权架构如下所示:
每个 Envoy 代理都运行一个授权引擎,该引擎在运行时授权请求。当请求到达代理时,授权引擎根据当前授权策略评估请求上下文,并返回授权结果 ALLOW 或 DENY。 运维人员使用 .yaml 文件指定 Istio 授权策略。需要注意:拒绝策略优先于允许策略。
授权策略配置规则如下所示:
要配置授权策略,请创建一个 AuthorizationPolicy 自定义资源。一个授权策略包括选择器(selector),动作(action) 和一个规则(rules)列表:
selector 字段指定策略的目标
action 字段指定允许还是拒绝请求
rules 指定何时触发动作
rules 下的 from 字段指定请求的来源
rules 下的 to 字段指定请求的操作
rules 下的 when 字段指定应用规则所需的条件
下面通过实际例子来看看AuthorizationPolicy的规则。这里要沿用上一篇博客在foo和bar namespace下面创建的httpbin和sleep服务。
案例一:允许所有请求的AuthorizationPolicy,spec中不配置任何规则,即允许所有请求。
- kubectl apply -f - <<EOF
- apiVersion: security.istio.io/v1beta1
- kind: AuthorizationPolicy
- metadata:
- name: allow-nothing
- namespace: foo
- spec:
- {}
- EOF
创建该AuthorizationPolicy后,从bar.sleep访问foo.httpbin和foo.sleep访问foo.httpbin都能成功
- kubectl exec "$(kubectl get pod -l app=sleep -n bar -o jsonpath={.items..metadata.name})" -c sleep -n bar -- curl http://httpbin.foo:8000/headers
-
- kubectl exec "$(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name})" -c sleep -n foo -- curl http://httpbin.foo:8000/headers
案例二:创建另外一个AuthorizationPolicy, 只控制了rule/to即允许访问foo namespace下的httpbin的GET请求。故创建下面的Policy后,通过上面的命令访问仍然能访问成功。
- kubectl apply -f - <
- apiVersion: security.istio.io/v1beta1
- kind: AuthorizationPolicy
- metadata:
- name: "httpbin-viewer"
- namespace: foo
- spec:
- selector:
- matchLabels:
- app: httpbin
- action: ALLOW
- rules:
- - to:
- - operation:
- methods: ["GET"]
- EOF
案例三:接着再创建一个定义了From的AuthorizationPolicy,允许bar namespace下的sa=sleep的来源访问foo下面的httpbin的GET请求。
- kubectl apply -f - <
- apiVersion: security.istio.io/v1beta1
- kind: AuthorizationPolicy
- metadata:
- name: "httpbin-viewer"
- namespace: foo
- spec:
- selector:
- matchLabels:
- app: httpbin
- action: ALLOW
- rules:
- - from:
- - source:
- principals: ["cluster.local/ns/bar/sa/sleep"]
- to:
- - operation:
- methods: ["GET"]
- EOF
再次用上面的命令访问,可以看到如果用foo namespace下的sa访问提示access deny。
上面通过实际例子演示了如何通过配置AuthorizationPolicy来控制应用于应用间访问授权。更多AuthorizationPolicy的配置规则可查看官网信息。
-
相关阅读:
OpenCV中拟合线性方程(最小二乘法)
【MySQL】MySQL中的逻辑运算符,位运算符和运算符的优先级
Idea汉化
DO280OpenShift访问控制--加密和ConfigMap
asp.net学生在线论坛
经纬信息IPO过会:年营收3.5亿 叶肖华控制46.3%股权
mysql.mongoDb,neo4j数据库对比
关于mac终端 无法显示中文 + echo cut 组合问题
拦截器碰到的坑记录
9成企业打算发年终奖,人均到手2.3万元
-
原文地址:https://blog.csdn.net/qiaotl/article/details/126021697