Istio v1aplha3 路由 AP

发布时间:2019-09-13 09:31:32编辑:auto阅读(1741)

    先来看看Nginx 的虚拟机配置

    upstream test_app { 
            server 127.0.0.1:5000;
        }
        server {
            listen  127.0.0.1:80;
    
            location / {
               proxy_pass http://test_app; 
            }
        }
    对于nginx的虚拟机配置,正常应该有下面三个东西
    • upstream : 指定代理后端应用服务地址
    • server : 配置指定主机,端口
    • location : 路由指定允许访问的url地址

    Istio v1aplha3 路由 API 中的配置资源

    Istio v1aplha3 路由 API

    v1alpha3引入了以下这些新的配置资源来控制进入网格,网格内部和离开网格的流量路由。

    • Gateway
    • VirtualService
    • DestinationRule
    • ServiceEntry

      跨多个配置资源的控制流程。

    Istio v1aplha3 路由 API

    Gateway

    Gateway 用于为 HTTP / TCP 流量配置负载均衡器, Gateway 只用于配置L4-L6功能(例如,对外公开的端口,TLS 配置)

     Gateway 类似Nginx中的server 配置

    类似实例如下:

    apiVersion: networking.istio.io/v1alpha3
    kind: Gateway
    metadata:
      name: bookinfo-gateway
    spec:
      servers:
      - port:
          number: 443
          name: https
          protocol: HTTPS
        hosts:
        - bookinfo.com
        tls:
          mode: SIMPLE
          serverCertificate: /tmp/tls.crt
          privateKey: /tmp/tls.key
    
    • spec.servers.port : 指定暴露对外的端口,协议(类似nginx的listen的端口)
    • spec.servers.tls : 指定ssl密钥
    • spec.servers.hosts: 指定暴露对外的hosts,域名或IP(类似nginx的listen的host)

    VirtualService

    VirtualService类似Nginx上面的location模块,当然是类似,不是一样,这样说真是方便理解。在 v1alph3,可以在单个 VirtualService 资源中提供相同的配置:
    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: bookinfo
    spec:
      hosts:
        - bookinfo.com
      gateways:
      - bookinfo-gateway # <---- bind to gateway
      http:
      - match:
        - uri:
            prefix: /reviews
        route:
        ...

    上面的实例允许规则将外界对网关名称bookinfo-gateway的访问传递到代理服务bookinfo.com中。

    DestinationRule

    DestinationRule 类似nginx中的upstream字段功能,起到路由分配的作用:
    • DestinationRule 的 host 可以包含通配符前缀,以允许单个规则应用于多个服务。
    • DestinationRule 定义了目的 host 的子集 subsets (例如:命名版本)。 这些 subset 用于 VirtualService 的路由规则设置中,可以将流量导向服务的某些特定版本
    apiVersion: networking.istio.io/v1alpha3
    kind: DestinationRule
    metadata:
      name: reviews
    spec:
      host: reviews
      trafficPolicy:
        loadBalancer:
          simple: RANDOM
      subsets:
      - name: v1
        labels:
          version: v1
      - name: v2
        labels:
          version: v2
        trafficPolicy:
          loadBalancer:
            simple: ROUND_ROBIN
      - name: v3
        labels:
          version: v3
    

    这个配置的策略是,默认随机负载均衡。同时reviews提供三个版本,v2使用自定义的负载均衡策略ROUND_ROBIN。

    换成nginx的写法,大概类似:

    upstream v1{
            server reviews:v1;
    }
    
    upstream v2{
        ROUND_ROBIN;
            server reviews:v2;
    }
    
    upstream v3{
            server reviews:v3;
    }
    
    上面的说法只是为了方便理解,不是原理就是这样。

    ServiceEntry

    ServiceEntry 用于将附加条目添加到 Istio 内部维护的服务注册表中。 它最常用于对访问网格外部依赖的流量进行建模。ServiceEntry的用途是用于配置Egre***ule规则。说人话就是,允许集群内部应用访问外部地址的策略,如果不配置,sidecar并不能识别外部url应该重定向到哪里。
    apiVersion: networking.istio.io/v1alpha3
    kind: ServiceEntry
    metadata:
      name: foo-ext
    spec:
      hosts:
      - foo.com
      ports:
      - number: 80
        name: http
        protocol: HTTP
    

    例如这里允许网格内部访问foo.com地址。

    istio通过这些扩展的API可以实现策略访问控制,应用遥测等功能配置,方便快捷,非常实用,这里通过利用常用的nginx的比较,可以简单的理解istio各个api的功能,方便快速学习。


    一些常用的命令

    查看配置的virtualservices
    [root@172 ~]# istioctl get   virtualservices
    NAME          KIND                                          NAMESPACE
    bookinfo      VirtualService.networking.istio.io.v1alpha3   default
    details       VirtualService.networking.istio.io.v1alpha3   default
    productpage   VirtualService.networking.istio.io.v1alpha3   default
    ratings       VirtualService.networking.istio.io.v1alpha3   default
    reviews       VirtualService.networking.istio.io.v1alpha3   default
    
    查看配置的destinationrules
    [root@172 ~]# istioctl get destinationrules
    NAME              KIND                                           NAMESPACE
    details           DestinationRule.networking.istio.io.v1alpha3   default
    productpage       DestinationRule.networking.istio.io.v1alpha3   default
    ratings           DestinationRule.networking.istio.io.v1alpha3   default
    reviews           DestinationRule.networking.istio.io.v1alpha3   default
    istio-policy      DestinationRule.networking.istio.io.v1alpha3   istio-system
    istio-telemetry   DestinationRule.networking.istio.io.v1alpha3   istio-system
    
    查看配置的gateway
    [root@172 ~]# istioctl get gateway
    NAME               KIND                                   NAMESPACE
    bookinfo-gateway   Gateway.networking.istio.io.v1alpha3   default
    查看配置的ServiceEntry
    [root@172 ~]# istioctl get ServiceEntry 

关键字