九 Istio:istio安全之授权( 三 )


  • hostsnotHosts
  • portsnotPorts
  • methodsnotMethods
  • pathsnotPath
所有这些操作都适用于请求属性 。例如,要在一个特定的请求路径上进行匹配,我们可以使用路径 。paths:["/api/*","/admin"] 或特定的端口 ports: ["8080"],以此类推 。
3.4 条件【九 Istio:istio安全之授权】为了指定条件,我们必须提供一个 key 字段 。key 字段是一个 Istio 属性的名称 。例如,request.headerssource.ipdestination.port 等等 。关于支持的属性的完整列表,请参考 授权政策条件 。
条件的第二部分是 valuesnotValues 的字符串列表 。下面是一个 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 。
apiVersion: v1 kind: ServiceAccount metadata:name: web-frontend --- apiVersion: apps/v1 kind: Deployment metadata:name: web-frontendlabels:app: web-frontend spec:replicas: 1selector:matchLabels:app: web-frontendtemplate:metadata:labels:app: web-frontendversion: v1spec:serviceAccountName: web-frontendcontainers:- image: gcr.io/tetratelabs/web-frontend:1.0.0imagePullPolicy: Alwaysname: webports:- containerPort: 8080env:- name: CUSTOMER_SERVICE_URLvalue: 'http://customers.default.svc.cluster.local' --- kind: Service apiVersion: v1 metadata:name: web-frontendlabels:app: web-frontend spec:selector:app: web-frontendports:- port: 80name: httptargetPort: 8080 --- apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata:name: web-frontend spec:hosts:- '*'gateways:- gatewayhttp:- route:- destination:host: web-frontend.default.svc.cluster.localport:number: 80将上述 YAML 保存为 web-frontend.yaml,并使用 kubectl apply -f web-frontend.yaml 创建资源 。
最后,我们将部署 customers v1 服务 。
apiVersion: v1 kind: ServiceAccount metadata:name: customers-v1 --- apiVersion: apps/v1 kind: Deployment metadata:name: customers-v1labels:app: customersversion: v1 spec:replicas: 1selector:matchLabels:app: customersversion: v1template:metadata:labels:app: customersversion: v1spec:serviceAccountName: customers-v1containers:- image: gcr.io/tetratelabs/customers:1.0.0imagePullPolicy: Alwaysname: svcports:- containerPort: 3000 --- kind: Service apiVersion: v1 metadata:name: customerslabels:app: customers spec:selector:app: customersports:- port: 80name: httptargetPort: 3000 --- apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata:name: customers spec:hosts:- 'customers.default.svc.cluster.local'http:- route:- destination:host: customers.default.svc.cluster.localport:number: 80将上述内容保存为 customers-v1.yaml,并使用 kubectl apply -f customers-v1.yaml 创建部署和服务 。如果我们打开 GATEWAY_URL,应该会显示带有 customers v1 服务数据的 web 前端页面 。
让我们先创建一个授权策略,拒绝 default 命名空间的所有请求 。
apiVersion: security.istio.io/v1beta1 kind: AuthorizationPolicy metadata:name: deny-allnamespace: default spec:{}

经验总结扩展阅读