环境更新
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
服务网格
Istio
1.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
,tls
match: 匹配条件, 可以通过
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