Istio Gateway 是一个负责流量入口的 Kubernetes 服务,它将外部流量引导到 Istio Service Mesh 中,并提供 TLS 终止、认证和流量管理等功能。Istio VirtualService 是一个控制 Istio 中服务之间通信的规则对象,可以用来指定流量路由、版本选择、重试策略等。
下面是一个简单的示例:
- 创建一个 Gateway 对象
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: my-gateway
spec:
selector:
istio: ingressgateway #使用默认网关选择器
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "example.com"
这个 YAML 文件创建了一个名为 my-gateway
的 Gateway 对象,监听端口号为 80
,并绑定到域名 example.com
上。
- 创建一个 VirtualService 对象
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: my-virtualservice
spec:
hosts:
- "example.com"
gateways:
- my-gateway
http:
- match:
- uri:
prefix: "/v1"
route:
- destination:
host: v1-service.default.svc.cluster.local # 目标 Service 名称和 Namespace 名称
weight: 100 # 指定权重为100%
这个 YAML 文件创建了一个名为 my-virtualservice
的 VirtualService 对象,将流量路由到名称为 v1-service
的 Kubernetes Service 上。注意,这里使用的是服务名(hostname),而不是 IP 地址。
这个例子中,只有访问 /v1
前缀的请求才会被路由到 v1-service
服务上,其他请求将被忽略。如果需要将所有流量都路由到该服务上,则可以省略 match
字段。
以上示例说明了如何使用 Istio Gateway 和 VirtualService 来管理入口流量和服务通信规则。