• 基于Kubernetes + Istio实现灰度发布


    基于Kubernetes + Istio实现灰度发布

    在这里插入图片描述

    1. 规划节点

    节点规划,见表1。

    表1 节点规划

    IP主机名节点
    10.24.2.5k8s-master-node1master节点、仓库节点

    2. 基础准备

    已基于软件包chinaskills_cloud_paas_v2.0.iso部署完Kubernetes集群,并将提供的软件包ServiceMesh.tar.gz上传至master节点/root目录下。

    案例实施

    1. 基础环境准备

    (1)导入软件包

    下载并解压软件包:

    [root@master ~]# wget .....
    [root@master ~]# tar -xf ServiceMesh.tar.gz
    
    • 1
    • 2

    导入所有镜像:

    [root@master ~]# docker load -i ServiceMesh/images/image.tar
    
    • 1
    (2)启动Kubernetes集群

    初始化Kubernetes集群:

    [root@master ~]# init-cluster
    
    • 1

    查看集群状态:

    [root@master ~]# kubectl cluster-info
    Kubernetes control plane is running at https://apiserver.cluster.local:6443
    CoreDNS is running at https://apiserver.cluster.local:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
    
    To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2. 部署Bookinfo应用

    (1)部署应用程序

    部署Bookinfo应用到Kubernetes集群:

    [root@master ~]# cd ServiceMesh/
    [root@master ServiceMesh]# kubectl apply -f bookinfo/bookinfo.yaml
    service/details created
    serviceaccount/bookinfo-details created
    deployment.apps/details-v1 created
    service/ratings created
    serviceaccount/bookinfo-ratings created
    deployment.apps/ratings-v1 created
    service/reviews created
    serviceaccount/bookinfo-reviews created
    deployment.apps/reviews-v1 created
    service/productpage created
    serviceaccount/bookinfo-productpage created
    deployment.apps/productpage-v1 created
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    查看Pod状态:

    [root@master ServiceMesh]# kubectl get pods
    NAME                             READY  STATUS  RESTARTS  AGE
    details-v1-79f774bdb9-m98sl      1/1    Running   0      46s
    productpage-v1-6b746f74dc-snpf9  1/1    Running   0      46s
    ratings-v1-b6994bb9-nmws8        1/1    Running   0      46s
    reviews-v1-545db77b95-4rtn4      1/1    Running   0      46s
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    (2)启用对应用程序的外部访问

    现在Bookinfo应用程序已成功运行,需要使应用程序可以从外部访问,可以用Istio Gateway来实现这个目标。

    使用网关为网格来管理入站和出站流量,可以指定要进入或流出网格的流量。网关配置被用于运行在网格边界的独立Envoy代理,而不是服务工作负载的sidecar代理。

    与Kubernetes Ingress API这种控制进入系统流量的其他机制不同,Istio网关充分利用了流量路由的强大能力和灵活性。Istio的网关资源可以配置4-6层的负载均衡属性,如对外暴露的端口、TLS设置等。作为替代应用层流量路由(L7)到相同的API资源,绑定一个常规的Istio虚拟服务到网关,这样就可以像管理网格中其他数据平面的流量一样去管理网关流量。

    网关主要用于管理进入的流量,也可以配置出口网关。出口网关为流出网格的流量配置一个专用的出口节点,这可以限制哪些服务可以或应该访问外部网络,或者启用出口流量安全控制为网格添加安全性。

    Gateway配置文件如下:

    [root@master ServiceMesh]# cat bookinfo-gateway.yaml
    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
    ...........
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    这个网关指定所有HTTP流量通过80端口流入网格,然后把网关绑定到虚拟服务上。

    为应用程序定义Ingress网关:

    [root@master ServiceMesh]# kubectl apply -f bookinfo-gateway.yaml
    gateway.networking.istio.io/bookinfo-gateway created
    virtualservice.networking.istio.io/bookinfo created
    
    • 1
    • 2
    • 3

    确认网关创建完成:

    [root@master ServiceMesh]# kubectl get gateway
    NAME               AGE
    bookinfo-gateway       32s
    
    • 1
    • 2
    • 3

    查看Ingress Gateway:

    [root@master ServiceMesh]# kubectl get svc -n istio-system
    NAME                   TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)         AGE
    istio-egressgateway    ClusterIP      10.101.130.107           80/TCP,443/TCP  30m
    istio-ingressgateway   LoadBalancer   10.102.250.102        15021:32634/TCP,80:22092/TCP,443:30119/TCP,31400:30282/TCP,15443:32486/TCP           30m
    
    • 1
    • 2
    • 3
    • 4

    可以看到Gateway 80端口对应的NodePort端口是22092,在浏览器上通过http://master_IP:22092/productpage访问Bookinfo应用,如图所示:

    图1.png
    图1

    (3)生产测试

    3. 启用Istio

    (1)在productpage启用Istio
    (2)在所有微服务中启用Istio
    (3)监控Istio

    4. 灰度发布

  • 相关阅读:
    Python绘图系统14:用tkinter做一个绘图风格控件
    python软件许可License文件生成
    机器学习第12天:聚类
    【Python百日进阶-Web开发-Feffery】Day406 - fac实例:利用dash-leaflet实现可点击多选的区域地图
    底软驱动 | 大厂面试爱考的C++内存相关
    typeScript--[interface接口实现类的定义,函数定义,可索引定义]
    AGI 远不止 ChatGPT!一文入门 AGI 通识及应用开发
    mysql 主从配置
    模型部署遇到的问题
    网站SEO优化有哪些要点?
  • 原文地址:https://blog.csdn.net/qq_45714272/article/details/126325112