微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

kubernetes istio之流量管理

1.部署 Bookinfo 应用

要在 Istio 中运行这一应用,无需对应用自身做出任何改变。我们只要简单的在 Istio 环境中对服务进行配置和运行,具体一点说就是把 Envoy sidecar 注入到每个服务之中。这个过程所需的具体命令和配置方法由运行时环境决定,而部署结果较为一致,如下图所示:

所有的微服务都和 Envoy sidecar 集成在一起,被集成服务所有的出入流量都被 sidecar 所劫持,这样就为外部控制准备了所需的 Hook,然后就可以利用 Istio 控制平面为应用提供服务路由、遥测数据收集以及策略实施等功能

接下来可以根据 Istio 的运行环境,按照下面的讲解完成应用的部署。

  1. 进入 Istio 安装目录。
  2. 启动应用容器:

    • 如果集群用的是手工 Sidecar 注入,使用如下命令: 
    • @H_404_17@
       $ kubectl apply -f <(istioctl kube-inject -f samples/bookinfo/platform/kube/bookinfo.yaml)
       

      istioctl kube-inject 命令用于在在部署应用之前修改 bookinfo.yaml

      • 如果集群使用的是自动 Sidecar 注入,只需简单的 kubectl 就能完成服务的部署。
      • @H_404_17@
         $ kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
         

        上面的命令会启动全部的四个服务,其中也包括了 reviews 服务的三个版本(v1v2 以及 v3

      • 给应用定义 Ingress gateway:

        $ kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
         
      • 确认所有的服务和 Pod 都已经正确的定义和启动:

        $ kubectl get services
        NAME          TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                         AGE
        details       ClusterIP   10.254.86.98     <none>        9080/TCP                        3h
        kubernetes    ClusterIP   10.254.0.1       <none>        443/TCP                         149d
        productpage   ClusterIP   10.254.199.214   <none>        9080/TCP                        3h
        ratings       ClusterIP   10.254.102.147   <none>        9080/TCP                        3h
        reviews       ClusterIP   10.254.249.86    <none>        9080/TCP                        3h
         
        $ kubectl get pods
        NAME                              READY     STATUS    RESTARTS   AGE
        details-v1-6456dbdb9-crqnw        2/2       Running   0          3h
        productpage-v1-6f6887645c-52qhn   2/2       Running   0          3h
        ratings-v1-648cf76d8f-g65s5       2/2       Running   0          3h
        reviews-v1-7dcbc85bb5-j748n       2/2       Running   0          3h
        reviews-v2-65fd78f5df-r8n6r       2/2       Running   0          3h
        reviews-v3-95c85969c-zmpfx        2/2       Running   0          3h
         
      • 确定 Ingress 的 IP 和端口

        执行以下命令以确定 ingressgateway 是否启用了 NodePort 模式。

        $ kubectl -n istio-system get svc istio-ingressgateway
        NAME                   TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)                                                                                                     AGE
        istio-ingressgateway   NodePort   10.254.160.93   <none>        80:31380/TCP,443:31390/TCP,31400:31400/TCP,15011:25059/TCP,8060:36612/TCP,15030:25049/TCP,15031:36810/TCP   3h
        Copy

        确定 ingress IP:

        $ export INGRESS_HOST=$(kubectl -n istio-system get po -l istio=ingressgateway -o go-template='{{range .items}}{{.status.hostIP}}{{end}}')
         

        确定端口:

        $ export INGRESS_PORT=$(kubectl -n istio-system get svc istio-ingressgateway -o go-template='{{range .spec.ports}}{{if eq .name "http"}}{{.nodePort}}{{end}}{{end}}')
         
      • 设置 GATEWAY_URL

         $ export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
         

下面可以用 curl 命令来确认 Bookinfo 应用的运行情况:

$ curl -o /dev/null -s -w "%{http_code}\n" http://${GATEWAY_URL}/productpage
200
 

还可以用浏览器打开网址 http://$GATEWAY_URL/productpage,来浏览应用的 Web 页面。如果刷新几次应用的页面,就会看到页面中会随机展示 reviews 服务的不同版本的效果(红色、黑色的星形或者没有显示)。reviews 服务出现这种情况是因为我们还没有使用 Istio 来控制版本的路由。

3. 金丝雀部署


由于 Bookinfo 示例部署了三个版本的 reviews 微服务,因此我们需要设置认路由。 否则,如果您当多次访问应用程序,您会注意到有时输出包含星级评分,有时又没有。 这是因为没有为应用明确指定缺省路由时,Istio 会将请求随机路由到该服务的所有可用版本上。

此任务假定您尚未设置任何路由。 如果您已经为示例应用程序创建了存在冲突的路由规则,则需要在下面的命令中使用 replace 代替 create。 请注意:本文档假设还没有设置任何路由规则。

首先将所有微服务的认路由设置为 v1。

$ istioctl create -f samples/bookinfo/networking/virtual-service-all-v1.yaml
$ istioctl create -f samples/bookinfo/networking/destination-rule-all.yaml

可以通过下面的命令来显示已创建的路由规则:

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐