Mode
Scroll
Turn Page
Size
Defaut
Font
YaHei
SimHei
SimSun
Background
Width
Immerse
760
1200
Full
10.1 整体介绍

Prev

10.3 黑白名单

Next

More

10.2 Denier适配器

通过Denier适配器可以实现简单的服务访问控制,通过设置条件,可以拒绝部分服务间的访问。使用示例如下:


1 apiVersion: config.istio.io/v1alpha2
 2 kind: denier
 3 metadata:
 4   name: deny-handler
 5 spec:
 6   status:
 7     code: 7
 8     message: Not allowed
 9 ---
10 apiVersion: config.istio.io/v1alpha2
11 kind: checknothing
12 metadata:
13   name: deny-request
14 spec:
15 ---
16 apiVersion: config.istio.io/v1alpha2
17 kind: rule
18 metadata:
19   name: deny-service-node-v2
20 spec:
21   match: destination.labels["app"] == "service-go" && source.labels["app"]
          == "service-node" && source.labels["version"] == "v2"
22   actions:
23   - handler: deny-handler.denier
24     instances:
25     - deny-request.checknothing

第1~8行定义了名为deny-handler的denier适配器,code定义了请求被拒绝后返回的gRPC的响应码,code为7表示没有访问权限,与HTTP中的403响应码意义相同,message定义了请求被拒绝时返回的错误信息(面向开发者)。

第10~14行定义了名为deny-request的checknothing实例,直接返回空数据,一般用于测试。

第16~26行定义了名为deny-service-node-v2的rule,该规则表明,当访问service-node服务的v2版本时,无法得到service-go服务的正常响应。

【实验】

1)创建测试Pod:


$ kubectl apply -f kubernetes/dns-test.yaml

2)创建Denier规则:


$ kubectl apply -f istio/security/policy-rule-deny-simple.yaml

3)访问service-node服务:


$ kubectl exec dns-test -c dns-test -- curl -s http://service-node/env
{"message":"node v1","upstream":[{"message":"go v1","response_time":"0.50"}]}
$ kubectl exec dns-test -c dns-test -- curl -s http://service-node/env
{"message":"node v2","upstream":[]}

当访问service-node服务的v1版本时,可以得到service-go服务的正常响应;当访问service-node服务的v2版本时,无法得到service-go服务的正常响应。这正好符合我们设置的访问权限策略,说明我们设置的Denier适配器规则已经生效。

4)清理:


$ kubectl delete -f kubernetes/dns-test.yaml
$ kubectl delete -f istio/security/policy-rule-deny-simple.yaml

Prev
Next
Istio入门与实战 10.2 Denier适配器
Library
已经是最大字号
已经是最小字号

鄂ICP备19014071号-1 ©zf 2018-2020
鄂公网安备 42018502003891号