本小节演示如何去构建针对HTTP流量的授权。
1. 准备工作
读取授权概念
安装带有开启双向TLS的istio.
部署Bookinfo案例应用
2. 针对使用HTTP流量的工作流配置访问控制
使用Istio,您可以轻松地为网格中的工作负载设置访问控制。本任务向您展示如何使用Istio授权设置访问控制。首先,配置一个简单的拒绝所有策略,拒绝向工作负载发出的所有请求,然后逐渐地、增量地授予对工作负载的更多访问权。
- 运行以下命令在默认名称空间中创建一个拒绝所有策略。策略没有选择器字段,该字段将策略应用于默认名称空间中的每个工作负载。spec:策略字段的值为空{}。这个值意味着不允许任何流量,有效地拒绝了所有请求。
$ kubectl apply -f - <<EOFapiVersion: security.istio.io/v1beta1kind: AuthorizationPolicymetadata:name: deny-allnamespace: defaultspec:{}EOF
将浏览器指向Bookinfo productpage (http://$GATEWAY_URL/productpage)。您应该看到“RBAC:拒绝访问”。该错误显示配置的拒绝所有策略正在按预期工作,并且Istio没有任何规则允许对网格中的工作负载进行任何访问。
- 运行以下命令创建一个productpage-viewer策略,以允许使用GET方法访问productpage工作负载。该策略没有在规则中设置from字段,这意味着允许所有源,有效地允许所有用户和工作负载:
$ kubectl apply -f - <<EOFapiVersion: "security.istio.io/v1beta1"kind: "AuthorizationPolicy"metadata:name: "productpage-viewer"namespace: defaultspec:selector:matchLabels:app: productpagerules:- to:- operation:methods: ["GET"]EOF
将浏览器指向Bookinfo productpage (http://$GATEWAY_URL/productpage)。现在您应该看到“Bookinfo示例”页面。但是,你可以在页面上看到以下错误:
- Error fetching product details
- Error fetching product reviews on the page.
这些错误是预料之中的,因为我们没有授予productpage工作负载对详细信息和检查工作负载的访问权限。接下来,您需要配置一个策略来授予对这些工作负载的访问权。
- 运行以下命令创建details-viewer策略,以允许productpage工作负载使用集群发出请求。cluster.local/ns/default/sa/bookinfo-productpage服务账号,通过GET方法访问详细工作负载:
$ kubectl apply -f - <<EOFapiVersion: "security.istio.io/v1beta1"kind: "AuthorizationPolicy"metadata:name: "details-viewer"namespace: defaultspec:selector:matchLabels:app: detailsrules:- from:- source:principals: ["cluster.local/ns/default/sa/bookinfo-productpage"]to:- operation:methods: ["GET"]EOF
- 运行以下命令创建一个策略
reviews-viewer,以允许productpage工作负载使用集群发出请求。使用cluster.local/ns/default/sa/bookinfo-productpage服务账号,通过GET方法访问reviews工作负载:
$ kubectl apply -f - <<EOFapiVersion: "security.istio.io/v1beta1"kind: "AuthorizationPolicy"metadata:name: "reviews-viewer"namespace: defaultspec:selector:matchLabels:app: reviewsrules:- from:- source:principals: ["cluster.local/ns/default/sa/bookinfo-productpage"]to:- operation:methods: ["GET"]EOF
将浏览器指向Bookinfo productpage (http://$GATEWAY_URL/productpage)。现在,您应该会看到“Bookinfo Sample”页面,其中“Book Details”位于页面的左下角,“Book Reviews”位于页面的右下角。然而,在“Book Reviews”部分,有一个错误评Ratings service currently unavailable。
这是因为reviews工作负载没有访问额定工作负载的权限。要修复这个问题,您需要将reviews工作负载访问权限授予ratings工作负载。接下来,我们配置一个策略来授予reviews工作负载访问权限。
- 运行以下命令创建ratings-viewer策略,以允许审查工作负载使用集群cluster.local/ns/default/sa/bookinfo-reviews service账户发出请求,通过GET方法访问
ratings工作负载
$ kubectl apply -f - <<EOFapiVersion: "security.istio.io/v1beta1"kind: "AuthorizationPolicy"metadata:name: "ratings-viewer"namespace: defaultspec:selector:matchLabels:app: ratingsrules:- from:- source:principals: ["cluster.local/ns/default/sa/bookinfo-reviews"]to:- operation:methods: ["GET"]EOF
使用浏览器访问http://$GATEWAY_URL/productpage 你应该在“Book Reviews” 部分看到”black”和“red” ratings.
3. 清空本实验
- 从你的配置文件中移除所有授权策略
$ kubectl delete authorizationpolicy.security.istio.io/deny-all$ kubectl delete authorizationpolicy.security.istio.io/productpage-viewer$ kubectl delete authorizationpolicy.security.istio.io/details-viewer$ kubectl delete authorizationpolicy.security.istio.io/reviews-viewer$ kubectl delete authorizationpolicy.security.istio.io/ratings-viewer
