Istio入口流量路由

    承接上文Service Mesh - Kubernetes & Istio 开发环境搭建(Mac OS),上文介绍了开发环境k8s+Istio的搭建,以及官方示例的部署,但是通过上文的例子,我们还是不能了解到流量究竟是怎样从外部流入到网格内,并且网格内流量就是怎么路由的,本篇文章将了解一下这方面内容。

网格可视化Kiali

通过Istio插件安装(本文使用)

Istio 1.7+已经推出的所有功能于一身的yamls安装第三方插件组件,如Kiali,普罗米修斯,积家,Grafana和其他。

这些仅用于演示,并未针对性能或安全性进行调整。

要使用您的 Istio 版本随附的一体式 yaml 安装 Kiali 服务器,请运行以下命令:

liupenghui:istio-1.10.2 penghuiliu$ kubectl apply -f ${ISTIO_HOME}/samples/addons/kiali.yaml
customresourcedefinition.apiextensions.k8s.io/monitoringdashboards.monitoring.kiali.io created
serviceaccount/kiali created
configmap/kiali created
clusterrole.rbac.authorization.k8s.io/kiali-viewer created
clusterrole.rbac.authorization.k8s.io/kiali created
clusterrolebinding.rbac.authorization.k8s.io/kiali created
role.rbac.authorization.k8s.io/kiali-controlplane created
rolebinding.rbac.authorization.k8s.io/kiali-controlplane created
service/kiali created
deployment.apps/kiali created

安装Prometheus

liupenghui:addons penghuiliu$ kubectl apply -f prometheus.yaml 
serviceaccount/prometheus created
configmap/prometheus created
clusterrole.rbac.authorization.k8s.io/prometheus created
clusterrolebinding.rbac.authorization.k8s.io/prometheus created
service/prometheus created
deployment.apps/prometheus created

安装Grafana

liupenghui:addons penghuiliu$ kubectl apply -f grafana.yaml 
serviceaccount/grafana created
configmap/grafana created
service/grafana created
deployment.apps/grafana created
configmap/istio-grafana-dashboards created
configmap/istio-services-grafana-dashboards created

打开网格可视化

liupenghui:istio-1.10.2 penghuiliu$ istioctl dashboard kiali
http://localhost:20001/kiali

多次访问Bookinfo示例http://localhost/productpage 流量图如下:

从图中可以看出流量是从istio-ingressgateway流入到网格内部,所以Istio网关和VirtualService作为流量的入口代替了k8s的入口控制器(Ingress),istio-ingressgateway正是Istio提前配置好的网关

kiali.png

网关(ingressgateway)

    Istio网关可以管理入站/出站网络流量,与Sidecar代理不同,网关主要被配置用于运行在网格边界的独立代理。与Kubernetes入口API这种控制进入系统流量的机制不同,网关的流量路有更加强大状语从句:灵活。因为是网关可以配置4-6层的负载均衡属性,对外如暴露的端口,TLS设置等,而应用层流量路由则交给VirtualService,它可以绑定到一个网关上。让你可以像管理网格中其他数据的平面流量一样去管理网关流量。

Istio 提供了一些采集配置网关(istio-ingressgateway 和 istio-egressgateway)供我们使用,下面是Bookinfo例子中的网关和配置。

2.png

bookinfo-gateway.yaml

    Bookinfo示例中网关使用了默认的ingressgateway,并让HTTP流量通过80端口进入网格,因此,访问http://localhost/productpage时HTTP流量便由istio-ingressgateway通过bookinfo-gateway暴露的80端口流量网络配置经格内。

注:这里主机设置为*,表示允许所有HTTP流量流向80端口如果你想指定域名可以将主机设置为需要的域名,这样便只有设置的域名才能通过的BookInfo网关将外部HTTP流量通过80端口流入排列内。

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:
        - "*"

VirtualService(虚拟服务)

    Istio VirtualService配置如何在服务网格内将请求路由到服务,这基于Istio平台个人文库状语从句:提供的基本的连通性服务状语从句:发现能力。每个VirtualService包含一组路由规则,Istio按顺序评估它们,Istio将每个给定的请求匹配到 VirtualService 指定的特定目标地址。

下面是Bookinfo例子中的VirtualService,可以看到绑定了bookinfo-gateway网关,并声明了消费规则到productpage服务。

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: bookinfo
spec:
  hosts:
  - "*"
  gateways:
  - bookinfo-gateway # 绑定网关
  http:
  - match: # 匹配的URL前缀
    - uri:
        exact: /productpage
    - uri:
        prefix: /static
    - uri:
        exact: /login
    - uri:
        exact: /logout
    - uri:
        prefix: /api/v1/products
    route:
    - destination:
        host: productpage # 后端服务
        port:
          number: 9080

因此,访问http://localhost/productpageHTTP流量便由istio-ingressgateway通过bookinfo-gateway配置经80入口入口地址内,通过bookinfoVirtualService的路由规则,匹配到了exact: /productpage。最后,将流量端口了产品页面的9080端口。

apiVersion: v1
kind: Service
metadata:
  name: productpage
  labels:
    app: productpage
    service: productpage
spec:
  ports:
  - port: 9080
    name: http
  selector:
    app: productpage

总结

    Istio通过网关管理网格入站网站流量,再通过VirtualService配置路由规则,将请求路由到服务。网关好比“园区” (网格)的门口管理员管理着进来的“人” (流量),而VirtualService则是园区里面每一条“家” (服务)的小径

参考

网格可视化安装

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Redick01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值