将上述内容保存为 deny-all.yaml
,并使用 kubectl apply -f deny-all.yaml
创建该策略 。
如果我们尝试访问 GATEWAY_URL
,我们将得到以下响应 。
RBAC: access denied
同样,如果我们试图在集群内运行一个 Pod,并从 default
命名空间内向 Web 前端或 customers 服务提出请求,我们会得到同样的错误 。
让我们试试吧 。
$ kubectl run curl --image=radial/busyboxplus:curl -i --tty If you don't see a command prompt, try pressing enter. [ root@curl:/ ]$ curl customers RBAC: access denied [ root@curl:/ ]$ curl web-frontend RBAC: access denied [ root@curl:/ ]$
在这两种情况下,我们都得到了拒绝访问的错误 。
我们要做的第一件事是使用 ALLOW
动作,允许从入口网关向 web-frontend
应用程序发送请求 。在规则中,我们指定了入口网关运行的源命名空间(istio-system
)和入口网关的服务账户名称 。
apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata:name: allow-ingress-frontendnamespace: default spec:selector:matchLabels:app: web-frontendaction: ALLOWrules:- from:- source:namespaces: ["istio-system"]- source:principals: ["cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account"]
将上述内容保存为 allow-ingress-frontend.yaml
,并使用 kubectl apply -f allow-ingress-frontend.yaml
创建策略 。
如果我们尝试从我们的主机向GATEWAY_URL
发出请求,这次我们会得到一个不同的错误 。
$ curl http://$GATEWAY_URL "Request failed with status code 403"
请注意,策略需要几秒钟才能分发到所有代理,所以你可能仍然会看到这个错误来自 customers 服务——记得我们允许调用 Web 前端 。然而,RBAC:access denied
的消息,时间为几秒钟 。
web-frontend
仍然不能调用 customers 服务 。如果我们回到我们在集群内运行的 curl Pod,尝试请求
http://web-frontend
,我们会得到一个 RBAC 错误 。DENY
策略是有效的,我们只允许从入口网关进行调用 。当我们部署 Web 前端时,我们也为 Pod 创建了一个服务账户(否则,命名空间中的所有 Pod 都被分配了默认的服务账户) 。现在我们可以使用该服务账户来指定 customers 服务调用的来源 。
apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata:name: allow-web-frontend-customersnamespace: default spec:selector:matchLabels:app: customersversion: v1action: ALLOWrules:- from:- source:namespaces: ["default"]source:principals: ["cluster.local/ns/default/sa/web-frontend"]
将上述 YAML 保存为 allow-web-frontend-customers.yaml
,并使用 kubectl apply -f allow-web-frontend-customers.yaml
创建策略 。一旦策略被创建,我们将看到 Web 前端再次工作——它将获得 customers 服务的回应 。
我们使用了多个授权策略,明确地允许从入口到前端以及从前端到 customers 服务的调用 。使用
deny-all
策略是一个很好的开始,因为我们可以控制、管理,然后明确地允许我们希望在服务之间发生的通信 。4.2 清理删除 Deployment、Service、VirtualService 和 Gateway:
kubectl delete sa customers-v1 web-frontend kubectl delete deploy web-frontend customers-v1 kubectl delete svc customers web-frontend kubectl delete vs customers web-frontend kubectl delete gateway gateway kubectl delete authorizationpolicy allow-ingress-frontend allow-web-frontend-customers deny-all kubectl delete pod curl
经验总结扩展阅读
- 五 Istio:使用服务网格Istio进行流量路由
- 2023年八月初十财神方位 九月二十四日财神方位
- 2023年七月十九出生叶姓男孩名字叫什么生辰八字五行查询
- 2024年七月廿九出生熊姓女孩名字生辰八字五行查询
- 不用去上班是什么梗
- 2023年农历八月十九是不是结婚吉日 今天可以迎亲吗
- 2023年农历八月二十九办婚礼好不好 这天宜结婚吗
- 2023年农历九月初一适不适合结婚
- 2023年农历九月初二结婚会幸福吗
- 2023年农历九月初三是不是结婚吉日 今天可以迎亲吗