istio

istio

  • sidecar模式: 向父应用无感知的添加功能,类似第三方包、中间件
  • service mesh服务网格: 服务与代理对应,服务之间通信通过代理来转发,比如kong网关等

使用istio原因

  • 网络流量控制
  • 可观测性,监控
  • 故障注入,测试
  • 安全,认证管理
  • 平台广泛性

基本概念

  • Gateway: 外部服务访问接入
  • virtualservice: 定义接入的路由规则
  • destinationrule 路由处理之后的流量访问策略
  • serviceentry 外部服务接入到,一般用于sidecar访问外部流量

组件

istio_frame.png

istio分为数据面板和控制面板

  • Envoy: 高性能代理,依赖sidecar
  • Mixer: 监控和路由策略管理
  • Pilot: 配置规则到Envoy
  • Citadel: 安全相关,比如下发证书等
  • Galley: 对用户规则,平台规则(k8s等)进行检测

安装

1、下载安装包:
curl -L https://git.io/getLatestIstio | sh -
2、进入目录,并设置路径
cd istio-xxx
export PATH=$PWD/bin:$PATH
3、在k8s(>=1.9)安装
  3.1 设置用户授权
    kubectl apply -f install/kubernetes/helm/istio/templates/crds.yaml
    kubectl apply -f install/kubernetes/helm/istio/charts/certmanager/templates/crds.yaml
  3.2 使用helm安装,中间需要一些镜像,如果不能下载可以使用aliyun的,文章结尾有。
    helm template install/kubernetes/helm/istio --name istio --namespace istio-system > $HOME/istio.yaml
    kubectl create namespace istio-system
    kubectl apply -f $HOME/istio.yaml
4、设置边车注入,为每一个服务注入sidecar,这里选择自动注入
  4.1 首先判断apiserver的配置是否合法,有输出及合法
    kubectl api-versions | grep admissionregistration
  4.2 添加一个空间的label即可
    kubectl label namespace default istio-injection=enabled

查看安装结果

image.png
images.png1

使用istio作负载:

istio使用gateway来实现负载均衡,对应了原来的ingress,gateway和virtualservice搭配使用。
ingress和istio作负载时的对比:
ingress:

    apiVersion: extensions/v1beta1
        kind: Ingress
        metadata:
          name: kong-test
          namespace: default
        spec:
          rules:
          - host: example.com
            http:
              paths:
              - path: /
                backend:
                  serviceName: app-test
                  servicePort: 5000

istio:


Untitled Diagram.jpg

具体脚本

  • ingressgateway使用默认的
  • 注册gatewaay到ingressgateway
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: httpsleep-gateway
spec:
  selector:
    istio: ingressgateway # use Istio default gateway implementation
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "*"
  • 根据VirtualService来匹配service,可以没有subnet,没有则表示没有destinationrule。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: httpsleep
spec:
  hosts:
  - "test.istio.local.thundersdata.com"
  gateways:
  - httpsleep-gateway
  http:
  - match:
    - uri:
        prefix: /
    route:
    - destination:
        port:
          number: 30012
        host: test-web-svc
        subset: v1
  - route:
    - destination:
        host: test-web-svc
        port:
          number: 30012
        subset: v1
  • 匹配destinationrule
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: test
spec:
  host: test-web-svc
  trafficPolicy:
    loadBalancer:
      simple: RANDOM
  subsets:
  - name: v1
    labels:
      version: v1

其中istio中需要注意:

  • Gateway.hosts和VirtualService.hosts一样。
  • Gateway.name和VirtualService.gateways一样。
  • /headers路径在httpbin的service中必须有

访问外部路由

据说使用serviceentry可以实现注册访问,但是我的一直可以访问,还有待补充

apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: sleep-entry
spec:
  ports:
  - number: 80
    name: http
    protocol: HTTP
  hosts:
  - "www.baidu.com"
  resolution: DNS
Untitled Diagram.jpg
具体脚本

ingressgateway使用默认的
注册gatewaay到ingressgateway
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: httpsleep-gateway
spec:
  selector:
    istio: ingressgateway # use Istio default gateway implementation
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "*"
根据VirtualService来匹配service,可以没有subnet,没有则表示没有destinationrule。
Untitled Diagram.jpg
具体脚本

ingressgateway使用默认的
注册gatewaay到ingressgateway
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: httpsleep-gateway
spec:
  selector:
    istio: ingressgateway # use Istio default gateway implementation
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "*"
根据VirtualService来匹配service,可以没有subnet,没有则表示没有destinationrule。
Untitled Diagram.jpg
具体脚本

ingressgateway使用默认的
注册gatewaay到ingressgateway
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: httpsleep-gateway
spec:
  selector:
    istio: ingressgateway # use Istio default gateway implementation
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "*"
根据VirtualService来匹配service,可以没有subnet,没有则表示没有destinationrule。

这里附一个阿里云的istio.yaml的关键镜像文件,由于不知道简书怎么传附件,望哪个书友知道告诉我
      image: "registry.cn-hangzhou.aliyuncs.com/aliacs-app-catalog/hyperkube:v1.7.6_coreos.0"
      image: "registry.cn-hangzhou.aliyuncs.com/aliacs-app-catalog/hyperkube:v1.7.6_coreos.0"
      image: "registry.cn-hangzhou.aliyuncs.com/aliacs-app-catalog/hyperkube:v1.7.6_coreos.0"
      image: "registry.cn-hangzhou.aliyuncs.com/aliacs-app-catalog/galley:1.0.5"
      image: "registry.cn-hangzhou.aliyuncs.com/aliacs-app-catalog/proxyv2:1.0.5"
      image: "registry.cn-hangzhou.aliyuncs.com/aliacs-app-catalog/proxyv2:1.0.5"
      image: "registry.cn-hangzhou.aliyuncs.com/aliacs-app-catalog/grafana:5.2.3"
    image: "registry.cn-hangzhou.aliyuncs.com/aliacs-app-catalog/mixer:1.0.5"
    image: "registry.cn-hangzhou.aliyuncs.com/aliacs-app-catalog/proxyv2:1.0.5"
    image: "registry.cn-hangzhou.aliyuncs.com/aliacs-app-catalog/mixer:1.0.5"
    image: "registry.cn-hangzhou.aliyuncs.com/aliacs-app-catalog/proxyv2:1.0.5"
      image: "registry.cn-hangzhou.aliyuncs.com/aliacs-app-catalog/pilot:1.0.5"
      image: "registry.cn-hangzhou.aliyuncs.com/aliacs-app-catalog/proxyv2:1.0.5"
      image: "registry.cn-hangzhou.aliyuncs.com/aliacs-app-catalog/prometheus:v2.3.1"
      image: "registry.cn-hangzhou.aliyuncs.com/aliacs-app-catalog/citadel:1.0.5"
      image: "registry.cn-hangzhou.aliyuncs.com/aliacs-app-catalog/sidecar_injector:1.0.5"
* istio详细概述,持续更新中
[istio概括]([https://www.jianshu.com/p/ed0a0b1029db](https://www.jianshu.com/p/ed0a0b1029db)
)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容