首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >在 Istio 服务网格内连接外部 MySQL 数据库

在 Istio 服务网格内连接外部 MySQL 数据库

作者头像
万猫学社
发布于 2022-12-01 08:07:40
发布于 2022-12-01 08:07:40
2K00
代码可运行
举报
运行总次数:0
代码可运行

为了方便理解,以 Istio 官方提供的 Bookinfo 应用示例为例,利用 ratings 服务外部 MySQL 数据库

Bookinfo应用的架构图如下:

其中,包含四个单独的微服务:

  • productpage:调用 detailsreviews 两个服务,用来生成页面。
  • details:包含了书籍的信息。
  • reviews:包含了书籍相关的评论。它还会调用 ratings 微服务。
  • rating:包含了由书籍评价组成的评级信息。

其中,reviews 服务有 3 个版本:

  • v1 版本不会调用 ratings 服务。
  • v2 版本会调用 ratings 服务,并使用 1 到 5 个黑色星形图标来显示评分信息。
  • v3 版本会调用 ratings 服务,并使用 1 到 5 个红色星形图标来显示评分信息。

准备 MySQL 数据库

创建一个名为 test 数据库,执行以下SQL创建表和数据:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DROP TABLE IF EXISTS `ratings`;
CREATE TABLE `ratings`  (
  `ReviewID` int() NOT NULL,
  `Rating` int() NULL DEFAULT ,
  PRIMARY KEY (`ReviewID`) USING BTREE
) ENGINE = InnoDB;

INSERT INTO ratings (ReviewID, Rating) VALUES (, );
INSERT INTO ratings (ReviewID, Rating) VALUES (, );

创建ServiceEntry

执行以下命令创建ServiceEntry:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: mysqldb
spec:
  hosts:
  - mysqldb.svc.remote
  ports:
  - number: 3306
    name: mysql
    protocol: MySQL
  location: MESH_EXTERNAL
  resolution: STATIC
  endpoints:
  - address: 192.168.1.116
    ports:
      mysql: 3306
EOF

其中,192.168.1.116MySQL 数据库的IP,3306是 MySQL 数据库的端口。

创建ratings服务

首先,执行以下命令,获取密码的Base64编码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
echo -n 'OneMoreSociety' | base64

其中,OneMoreSociety是连接 MySQL 数据库的密码。

然后,执行以下命令,创建 ratings 服务:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl apply -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
  name: mysql-credentials
type: Opaque
data:
  dbpasswd: T25lTW9yZVNvY2lldHk=
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: ratings-v2-mysql
  labels:
    app: ratings
    version: v2-mysql
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ratings
      version: v2-mysql
  template:
    metadata:
      labels:
        app: ratings
        version: v2-mysql
    spec:
      containers:
      - name: ratings
        image: docker.io/istio/examples-bookinfo-ratings-v2:1.16.2
        imagePullPolicy: IfNotPresent
        env:
          - name: DB_TYPE
            value: "mysql"
          - name: MYSQL_DB_HOST
            value: mysqldb.svc.remote
          - name: MYSQL_DB_PORT
            value: "3306"
          - name: MYSQL_DB_USER
            value: root
          - name: MYSQL_DB_PASSWORD
            valueFrom:
              secretKeyRef:
                name: mysql-credentials
                key: dbpasswd
        ports:
        - containerPort: 9080
        securityContext:
          runAsUser: 1000
EOF

其中,T25lTW9yZVNvY2lldHk=是连接 MySQL 数据库的密码的Base64编码。

修改路由规则

执行以下命令,把对 reviews 服务的调用全部路由到 v2 版本上:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
  - reviews
  http:
  - route:
    - destination:
        host: reviews
        subset: v2
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: reviews
spec:
  host: reviews
  subsets:
    - labels:
        version: v1
      name: v1
    - labels:
        version: v2
      name: v2
    - labels:
        version: v3
      name: v3
EOF

执行以下命令,把对 ratings 服务的调用全部路由到 v2-mysql 版本上:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: ratings
spec:
  hosts:
  - ratings
  http:
  - route:
    - destination:
        host: ratings
        subset: v2-mysql
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: ratings
spec:
  host: ratings
  subsets:
    - labels:
        version: v1
      name: v1
    - labels:
        version: v2-mysql
      name: v2-mysql
EOF

效果

访问 productpage 页面,可以看到 Reviewer1 显示2星, Reviewer2 显示4星,和数据库中的数据一致,如下图:

productpage@万猫学社

在Kiali中也可以看到对应的拓扑结构,如下图:

kiali@万猫学社

流量转移

访问 MySQL 数据库时,所有流量都路由到v1版本,具体配置如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: mysqldb
spec:
  hosts:
  - mysqldb.svc.remote
  ports:
  - number: 3306
    name: tcp
    protocol: TCP
  location: MESH_EXTERNAL
  resolution: STATIC
  endpoints:
  - address: 192.168.1.116
    ports:
      tcp: 3306
    labels:
      version: v1
  - address: 192.168.1.118
    ports:
      tcp: 3306
    labels:
      version: v2
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: mysqldb
spec:
  hosts:
  - mysqldb.svc.remote
  tcp:
  - route:
    - destination:
        host: mysqldb.svc.remote
        subset: v1
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: mysqldb
spec:
  host: mysqldb.svc.remote
  subsets:
    - labels:
        version: v1
      name: v1
    - labels:
        version: v2
      name: v2
EOF

访问 MySQL 数据库时,把50%流量转移到v2版本,具体配置如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: mysqldb
spec:
  hosts:
  - mysqldb.svc.remote
  tcp:
  - route:
    - destination:
        host: mysqldb.svc.remote
        subset: v1
      weight: 50
    - destination:
        host: mysqldb.svc.remote
        subset: v2
      weight: 50
EOF

访问 MySQL 数据库时,所有流量都路由到v2版本,具体配置如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: mysqldb
spec:
  hosts:
  - mysqldb.svc.remote
  tcp:
  - route:
    - destination:
        host: mysqldb.svc.remote
        subset: v2
EOF
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-08-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 万猫学社 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
常见的几种PCB表面处理技术!
随着科技的不断进步。市场上对PCB线路板的质量要求也越来越严格,进而对PCB表面处理技术发展和升级也越来越紧迫。本文主要介绍了目前市场上常见的PCB的表面处理技术。
高拓电子
2022/07/25
1.1K0
电路实习报告:简易收音机的焊接
焊接一般分三大类:熔焊、接触焊和钎焊。熔焊是指在焊接过程中,将焊件接头加热至熔化状态,在不外加压力的情况下完成焊接的方法。如电弧焊、气焊等。接触焊是在焊接过程中,必须对焊件施加压力(加热或不加热)完成焊接的方法。如超声波焊、脉冲焊、摩擦焊等。钎焊是指低于焊件熔点的钎料和焊件同时加热到钎料熔化温度后,利用液态钎料填充固态工件的缝隙使金属连接的焊接方法。电子产品安装工艺中所谓的“焊接”使用焊料的熔点低于450摄氏度,是软钎焊的一种,主要使用锡、铅等低熔点合金材料作焊料,因此俗称“锡焊”。
全栈程序员站长
2022/11/01
1.7K0
电路实习报告:简易收音机的焊接
什么是SMT钢网
本文是一篇全面介绍SMT钢网的文章,在这里,您将了解到SMT钢网的定义、SMT钢网的分类、SMT钢网相关的术语解释、SMT钢网开口设计、制作材料的介绍以及制作方法。
硬件开源小站
2023/04/13
3.6K0
电路板维修入门教程视频_电路板坏了去哪里维修
电容是由两片金属膜紧靠,中间用绝缘材料隔开而组成的元件。电容的特性主要是隔直流通交流。电容容量的大小就是表示能贮存电能的大小,电容对交流信号的阻碍作用称为容抗,它与交流信号的频率和电容量有关。
全栈程序员站长
2022/09/27
1.7K0
PCB电路板焊接温度和时间的要求有哪些?
不同焊接方法和元件类型对温度和时间的要求各不相同,需要根据具体应用和材料特性精细调整工艺参数。
不脱发的程序猿
2024/12/09
5450
PCB电路板焊接温度和时间的要求有哪些?
优思学院|SMT行业的质量水平应该是怎样的?
随着六西格玛管理的流行,在SMT、PCBA制造行业中选择优质的合约装配商(Subcontractor)时的重要性和要求也越来越高,问题变成了,目前行业的质量水平怎样才自好?
用户2865703
2023/01/30
3900
优思学院|SMT行业的质量水平应该是怎样的?
波峰焊是什么意思,有什么作用?
波峰焊(Wave Soldering)是一种电子元件的焊接方式,它可以将大量的插件式元件同时焊接在PCB表面。本文将从波峰焊的原理、优缺点、应用领域以及未来发展等方面进行介绍。
云恒制造
2023/04/10
1.3K0
SMT贴片加工的焊点失效的原因您了解吗?
下面让专业的SMT工厂高拓电子给大家简单介绍一下焊点失效的主要因素。简单概括就以下几点。
高拓电子
2022/07/19
4420
PCB常见术语总结
PCB(Printed Circuit Board),中文名称为印制电路板;简称PCB;用于在绝缘基板(FR-4、CEM-1等材料做的基板)上印制电气连接线路,用于控制器电子元件的安装以及电气连接
ElectricDeveloper
2021/08/18
3.3K0
焊接常识知多少?
1. 电烙铁 手工焊接元件,这个肯定是不可少了。在这里向大家推荐烙铁头比较尖的那种,因为在焊接管脚密集的贴片芯片的时候,能够准确方便的对某一个或某几个管脚进行焊接(PS:早期我以为是这样的,后来熟了之后发现刀头的更好使!)。
单片机点灯小能手
2022/05/19
8220
焊接常识知多少?
浅谈smt真空回流焊的基本原理--高拓电子
随着元器件不断向小型化发展,芯片集成度越来越高,无论是笔记本、智能手机还是医疗器械、汽车电子,军工和航天产品,产品中的阵列封装的BGA、CSP等器件应用越来越多,对产品的质量要求也越来越多。这都需要我们不断的提高smt工艺能力,增加高端设备,通过高质量焊接保证高可靠性产品。
高拓电子
2021/11/29
9360
焊接行业标准 IPC J-STD-006:电子产品的焊锡合金
全球电子行业采用无铅电子产品已经有近二十年了。在此期间,从事该行业的读者都认识到这个行业面临的变化和挑战,意识到要把铅(Pb)从电子产品中去除做起来没有那么简单。我认为,从一开始就要解决以下四个问题:
高拓电子
2022/09/22
2K0
隐秘的角落:SMT过炉速度不当带来的质量隐患
SMT论坛上有这么一个帖子,大概的问题是锡膏工艺后PCB上的晶振无法起振,排除虚焊、短路问题,在晶振回路区域用洗板水擦洗或者烙铁焊一下之后,晶振即恢复正常,而且问题可双向复现——
硬件大熊
2022/06/23
4570
隐秘的角落:SMT过炉速度不当带来的质量隐患
为什么PCB线路板要把过孔堵上?
导电孔Via hole又名导通孔,为了达到客户要求,线路板导通孔必须塞孔,经过大量的实践,改变传统的铝片塞孔工艺,用白网完成线路板板面阻焊与塞孔。生产稳定,质量可靠。
AI 电堂
2022/12/08
4290
为什么PCB线路板要把过孔堵上?
湿度敏感性等级(MSL)
目的在于确定那些由湿气所诱发应力敏感的非密封固态表面贴装元器件的分类, 以便对其进行正确的封装, 储存和处理, 以防回流焊和维修时损伤元器件.
徐师兄
2022/08/29
5.1K0
湿度敏感性等级(MSL)
印制电路板中常用标准介绍
1) IPC-ESD-2020: 静电放电控制程序开发的联合标准。包括静电放电控制程序所必须的设计、建立、实现和维护。根据某些军事组织和商业组织的历史经验,为静电放电敏感时期进行处理和保护提供指导。
高拓电子
2022/08/12
8230
PCB阻焊是什么?
PCB阻焊,也叫PCB防焊,PCB阻焊膜,英文为Solder Mask or Solder Resist,采用绿色等感光油墨喷涂于PCB电路板表层。
硬件开源小站
2023/04/24
2K0
IPC-J-STD-001标准动态
IPC J-STD-001焊接的电气及电子组件要求》的H版于2020年9月发布,它详述了制造电子组件时对材料和工艺的要求。过去一年,我最常被问到的问题之一是IPC J-STD-001H版有哪些大的变化。
高拓电子
2022/09/21
8690
PCB喷锡板有哪些优缺点?
喷锡板是一种常见类型的PCB板,一般为多层高精密度的PCB板,广泛应用于各类电子设备、通讯产品、计算机、医疗设备、航空航天等领域和产品。
高拓电子
2021/10/21
1.1K0
SMT的优势在哪里
SMT贴片指的是在PCB的基础上进行加工这一系列的工艺流程的简称,SMT是表面组装技术(表面贴装技术)(Surface Mounted Technology的缩写),是电子组装行业里最流行的一种技术和工艺,也是是新兴的工业制造技术和工艺。
高拓电子
2021/10/19
2K0
推荐阅读
相关推荐
常见的几种PCB表面处理技术!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验