购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

5.2 常用资源类型

5.2.1 流量控制

流量控制资源有:DestinationRule、VirtualService、Gateway、ServiceEntry、EnvoyFilter,主要用于控制服务的路由,控制集群出入口的流量等功能。下面分别介绍。

(1)DestinationRule

DestinationRule定义了流量路由规则匹配后流量的访问策略。在这些策略中可以定义负载均衡、连接池大小,以及负载均衡池中不健康实例的探测和实例的摘除规则等。示例如下:


apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: reviews-destination
spec:
  host: reviews.prod.svc.cluster.local
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2

(2)VirtualService

VirtualService定义了一系列的流量路由规则,将流量路由到指定的目标服务或者目标服务的子版本。示例如下:


apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews-route
spec:
  hosts:
  - reviews.prod.svc.cluster.local
  http:
  - match:
    - uri:
        prefix: "/wpcatalog"
    - uri:
        prefix: "/consumercatalog"
    rewrite:
      uri: "/newcatalog"
    route:
    - destination:
        host: reviews.prod.svc.cluster.local
        subset: v2
  - route:
    - destination:
        host: reviews.prod.svc.cluster.local
        subset: v1

(3)Gateway

Gateway用于配置服务网格流量的边界负载均衡器,负责接收进入服务网格和流出服务网格的HTTP/TCP连接。用于定义一系列应该开放的端口及其协议。示例如下:


apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: bookinfo-gateway
spec:
  selector:
    istio: ingressgateway # use istio default controller
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "*"

(4)ServiceEntry

ServiceEntry用于添加额外的注册条目到Istio内部的注册中心,以此来满足服务网格里自动发现的服务访问或者路由到这些手动指定的服务,这可以把外部服务导入网格内部。示例如下:


apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: external-svc-mongocluster
spec:
  hosts:
  - mymongodb.somedomain # not used
  addresses:
  - 192.192.192.192/24 # VIPs
  ports:
  - number: 27018
    name: mongodb
    protocol: MONGO
  location: MESH_INTERNAL
  resolution: STATIC
  endpoints:
  - address: 2.2.2.2
  - address: 3.3.3.3

(5)EnvoyFilter

EnvoyFilter描述了Envoy代理特有的过滤配置,这些配置可用于定制Envoy代理,改变Istio配置的Envoy代理的行为。使用这个特性时要非常的小心,因为错误的配置可能会破坏整个服务网格的稳定性。示例如下:


apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: httpbin
spec:
  workloadLabels:
    app: httpbin
  filters:
  - listenerMatch:
      portNumber: 8000
      listenerType: SIDECAR_INBOUND
    filterName: envoy.lua
    filterType: HTTP
    filterConfig:
      inlineCode: |
        function envoy_on_request(request_handle)
          request_handle:headers():add("X-Foo", "bar")
        end
        function envoy_on_response(response_handle)
          body_size = response_handle:body():length()
          response_handle:headers():add("X-Response-Body-Size", tostring(body_size))
    end

5.2.2 请求配额

请求配额可以对服务请求进行限流配置:

·Quota——指定用于配额限制的数据维度。可以理解为需要从请求中提取的信息及其提取规则,如:源地址、目标地址、目标版本等。示例如下:


apiVersion: "config.istio.io/v1alpha2"
kind: quota
metadata:
  name: requestcount
  namespace: istio-system
spec:
  dimensions:
    source: request.headers["x-forwarded-for"] | "unknown"
    destination: destination.labels["app"] | destination.service | "unknown"
    destinationVersion: destination.labels["version"] | "unknown"

·Redisquota——基于Redis实现的具体Quota,使用Quota定义的规则进行数据维度提取,指定具体的维度来进行配额。

·Memquota——基于内存实现的具体Quota,使用Quota定义的规则进行数据维度提取,指定具体的维度来进行配额。

·Quotaspec——定义指定Quota配额标准,例如:每次请求计数加1,或者每次请求计数加2,可以方便地用于限流、计费等场景。

·Quotaspecbinding——把Quotaspec和具体的Service相绑定。

·Rule——把配置的Instance对象传递给Handler来处理,在配额功能中使用时,负责绑定Quota和具体Quota实现,把Quota对象传递给具体的Quota进行处理。

5.2.3 mTLS认证策略

mTLS认证策略包括:MeshPolicy、Policy,主要用于服务间的流量加密和认证。

(1)MeshPolicy

MeshPolicy定义了全局的mTLS认证策略,这个资源的定义只能有一个实例。示例如下:


apiVersion: authentication.istio.io/v1alpha1
kind: MeshPolicy
metadata:
  name: default
spec:
  peers:
  - mtls: {}

(2)Policy

Policy用于配置命名空间或者服务的mTLS认证策略。示例如下:


apiVersion: authentication.istio.io/v1alpha1
kind: Policy
metadata:
  name: service-go
spec:
  targets:
  - name: service-go
  peers:
  - mtls: {}
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: service-go
spec:
  host: "service-go.default.svc.cluster.local"
  trafficPolicy:
    tls:
      mode: ISTIO_MUTUAL

5.2.4 RBAC访问权限

RBAC访问权限包括:ServiceRole、ServiceRoleBinding、RbacConfig,主要用于服务间的细粒度访问控制。

(1)ServiceRole

ServiceRole用于定义一系列的服务访问控制权限,示例如下:


apiVersion: "rbac.istio.io/v1alpha1"
kind: ServiceRole
metadata:
  name: products-viewer
  namespace: default
spec:
  rules:
  - services: ["products.svc.cluster.local"]
    methods: ["GET", "HEAD"]
    constraints:
    - key: "destination.labels[version]"
      value: ["v1", "v2"]

(2)ServiceRoleBinding

ServiceRoleBinding给ServiceRole分配一系列的授权对象,示例如下:


apiVersion: "rbac.istio.io/v1alpha1"
kind: ServiceRoleBinding
metadata:
  name: test-binding-products
  namespace: default
spec:
  subjects:
  - user: alice@yahoo.com
  - properties:
      source.namespace: "abc"
  roleRef:
    kind: ServiceRole
    name: "products-viewer"

(3)RbacConfig

RbacConfig定义全局配置,用来控制Istio RBAC的行为,这个资源的定义只能有一个实例,示例如下: pQBOgGegsGAurDIeCpW058Bs5oQaIOmtftnzZ4xpNKZ5VkppO8U3jALPahTGQtfH


apiVersion: rbac.istio.io/v1alpha1
kind: RbacConfig
metadata:
  name: default
spec:
  mode: 'ON_WITH_INCLUSION'
  inclusion:
    namespaces: 
    - default

点击中间区域
呼出菜单
上一章
目录
下一章
×