环境更新
istio的kiali插件无法识别ServiceEntry配置,如果按上篇文章安装相同的版本请更新版本删除旧版本下载最新版本,参照kubectl, kind 安装, istio安装
| 名称 | 版本 | 
|---|---|
| kubectl | 1.30.2 | 
| kind | 0.23.0 | 
| istioctl | 1.22.2 | 
示例
- 用户服务: user-http user-grpc
 - 公共服务: public-http public-grpc
 - 消息服务: message-http message-grpc
 - 好友服务: contact-http contact-grpc
 
服务网格
Istio1.1版本后支持自定义资源, 1.5之后版本使用apiVersion: networking.istio.io/v1, 1.5及以前版本使用 apiVersion: networking.istio.io/v1alpha3# 启动服务后通过接口示例多次请求接口查看网格
$ istioctl dashboard kiali



出站设置
配置说明
ServiceEntry 需要注意 Istio 兼容的api版本 networking.istio.io/v1alpha3 或 networking.istio.io/v1beta1  - apiVersion: 需要注意 
Istio兼容的api版本networking.istio.io/v1alpha3或networking.istio.io/v1beta1 - kind: 资源类型固定 
ServiceEntry - metadata: 资源元数据
 endpoints: 用于直接指定服务的端点地址, 具体内容:
- address: 网络地址可食用域名
 - ports: 端口列表
 - labels: 标签
 - weight: 负载权重
 
spec: 具体内容:
- hosts: 服务主机名
 - addresses: 服务ip地址
 ports: 端口协议,具体内容:
- number: 服务使用端口号
 - namae: 服务名称
 - protocol: 协议, 包含 
HTTP,HTTPS,HTTP2,GRPC,MONGO,TCP,TLS 
resolution: 解析模式,
NONE: 明确为IP模式,STATIC: 指明IP与端口,不需要使用DNS解析DNS: 使用DNS解析- 设置
endpoints,则代理会使用endpoints中的信息来解析目标IP,但hosts中的DNS名称仍然可以用于路由决策 - 未设置
endpoints,代理就会使用在hosts中指定的DNS地址进行解析 
- 设置
 DNS_ROUND_ROBIN: 解析服务时自动地在返回的多个IP地址之间进行轮询,以实现负载均衡。并非所有版本支持
location: 指定网格位置
MESH_EXTERNAL: 外部网格MESH_INTERNAL: 内部网格
示例配置
ServiceEntry定义集群外部服务访问, 示例只展示了mysql和redis的配置,详见gateway1.0
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: mysql
spec:
  hosts:
    - server-mysql.qvbilam.xin
  addresses:
    - 82.157.232.70
  ports:
    - number: 3306
      name: mysql
      protocol: TCP
  location: MESH_EXTERNAL
  resolution: DNS
---
# redis
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: redis
spec:
  hosts:
    - server-redis.qvbilam.xin
  addresses:
    - 82.157.232.70
  ports:
    - number: 6379
      name: redis
      protocol: TCP
  location: MESH_EXTERNAL
  resolution: DNS效果展示

入站设置
配置说明
Gateway
负责处理进入和离开服务网格的流量。Gateway 本质上是一个负载均衡器,用于将外部流量路由到服务网格内部的服务,并允许内部服务安全地访问外部服务。
- kind: 资源类型固定 
Gateway spec: 具体配置:
- selector: 指定网关 pod 名称, 通常配置为入口网关 
ingressgateway - servers: 定义多个服务协议,端口,地址
 
- selector: 指定网关 pod 名称, 通常配置为入口网关 
 
VirtualService
流量义服务间的流量路由规则
- kind: 资源类型固定 
VirtualService spec: 具体配置:
- hosts: 适用的服务名列表
 - gateways: 适用的网关列表
 http: 请求协议,可以是
http,tcp,tlsmatch: 匹配条件, 可以通过
ignoreUriCase标志启用不区分大小写的匹配- exact: 用于精确字符串匹配
 - prefix: 用于基于前缀的匹配
 - regex: 用于 RE2 样式)基于正则表达式的匹配
 
route: 满足匹配条件的目标服务
- destination: 控制不同版本接受流量比
 
- timeout: 请求超时时间
 - headers: 请求头操作
 - redirect: 可选
redirect,rewrite,retry,mirror,faultInjection,corsPolicy等 ,用于实现更复杂的流量管理功能,如重定向、重写、重试、流量镜像、故障注入和跨域资源共享 
配置示例
定义 Gateway 资源指明网格外部流量进入的方式
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: qvbilam-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "*"定义 VirtualService 路由规则, 绑定 gateway, 下列配置示例为部分服务配置, 详见gateway1.0
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: qvbilam-gateway
spec:
  hosts:
    - "*"
  gateways:
    - qvbilam-gateway
  http:
    # user, 省略其他服务配置
    - match:
        - uri:
            prefix: /user
        - uri:
            prefix: /account
      route:
        - destination:
            port:
              number: 9701
            host: user-web-server效果展示



